今天要讲的题目是全排列的问题:有1、2、3、...、n这样一个数列,要求输出其全排列。
那么,显然,这道题目非常之简单,用一个标志数组变量,标记数字的使用情况,然后根据它挑选数字即可。由于题目很简单,在这就不多说了,来看看代码:
1 #include<stdio.h> 2 int n; 3 int sum=0;//统计方法数 4 int a[10001]={0};//用于储存答案 5 int flag[10001]={0};//所有数字的标志变量初始化为0 6 void out();//函数用于输出 7 void f(int k);//函数用于求解 8 int main() 9 { 10 scanf("%d",&n); 11 f(0); 12 return 0; 13 } 14 void f(int k) 15 { 16 int i; 17 for(i=1;i<=n;i++) 18 { 19 if(flag[i]==0)//如果i没有被使用过 20 { 21 a[k]=i;//则选中i 22 flag[i]=1;//标记i为已使用 23 if(k==(n-1))//如果找到了所有n位数 24 out();//输出 25 else 26 f(k+1);//否则继续寻找下一位 27 flag[i]=0;//返回时还原现场 28 a[k]=0; 29 } 30 } 31 } 32 void out() 33 { 34 int i; 35 sum++;//每执行一次该函数则说明有一个解 36 printf("%d: ",sum); 37 for(i=0;i<n;i++) 38 printf("%d ",a[i]); 39 printf(" "); 40 }
代码如有不足,欢迎指教!