My Carelessness

Back to your page!


Or leave your comments here.

RegendLa

导航

关于回溯与n个数的全排列

  今天要讲的题目是全排列的问题:有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:\n",sum);
37     for(i=0;i<n;i++)
38         printf("%d ",a[i]);
39     printf("\n");
40 }

  代码如有不足,欢迎指教!

posted on 2015-05-27 17:44  最爱七  阅读(326)  评论(0编辑  收藏  举报




Thanks for your coming!
If what you read helps,I would appreciate!