生成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
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


浙公网安备 33010602011771号