0123456789
0123456798
0123456879
...........
...........
9876543210
一行数中不能有重复的数字。
要求:不用goto,少用嵌套循环,嵌套不超过6次,越少越好
求一算法,我百思不得其解,大家有什么好建议,尽管提出来,在这,我先谢过大家了。
这就是那个基于交换的算法,它的思想可能对于没学过DFS的人来说更容易接受,而且避免了DFS中一个判重复问题,还是不错的一个算法。
#include <iostream>using namespace std;
int x[10]={0,1,2,3,4,5,6,7,8,9};
void out(int* a,int n)
{
if(n){
printf(\"%d\",a[0]);
}
for(int i=1;i<n;i++){
printf(\" %d\",a[i]);
}
printf(\"\n\");
}void p(int n,int k=0)
{
if(k==n){
out(x,n);
}
else {
for(int i=k;i<n;i++){
swap(x[k],x[i]);
p(n,k+1);
swap(x[k],x[i]);
}
}
}int main()
{
p(10);
}
我总是不分C板块和C++板块,重写一遍
#include <stdio.h>int x[10]={0,1,2,3,4,5,6,7,8,9};
void out(int* a,int n)
{
int i;
if(n){
printf(\"%d\",a[0]);
}
for(i=1;i<n;i++){
printf(\" %d\",a[i]);
}
printf(\"\n\");
}void swap(int* a,int* b)
{
int t;
t=*a;
*a=*b;
*b=t;
}void p(int n,int k)
{
int i;
if(k==n){
out(x,n);
}
else {
for(i=k;i<n;i++){
swap(&x[k],&x[i]);
p(n,k+1);
swap(&x[k],&x[i]);
}
}
}void pemutation(int n)
{
p(n,0);
}int main()
{
pemutation(10);
}