生成1-n的错排

View Code 
 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int arr[1100],vis[1100];
 5 int n,num;
 6 void bfs(int x)
 7 {
 8     if(x>n)
 9     {
10         num++;
11         /*for(int i=1;i<=n;i++)//输出每一个错排
12             printf("%d  ",arr[i]);
13         printf("\n");*/
14         return ;
15     }
16    for(int i=1;i<=n;i++)
17    {
18        if(vis[i]==0 && x!=i)
19        {
20            vis[i]=1;
21            arr[x]=i;
22            bfs(x+1);
23            vis[i]=0;
24        }
25    }
26 }
27 int main()
28 {
29     while(scanf("%d",&n)!=EOF)
30     {
31         if(n==1)
32             printf("0\n");
33         else
34         {
35             num=0;
36             memset(vis,0,sizeof(vis));
37             bfs(1);
38             printf("num=%d****\n",num);//错排个数
39         }
40     }
41     system("pause");
42     return 0
43
posted @ 2012-05-23 20:58  wconvey  阅读(161)  评论(0)    收藏  举报