lse
86 {
87 if (x1!=n) //1未全部入栈
88 {
89 p[++i]=1;
90 x1++;
91 TF=false; //1入栈
92 }
93 else
94 {
95 p[++i]=2;
96 x2++;
97 TF=false; //2入栈
98 }
99 }
100 }
101 else //部分序列不合法,回溯
102 {
103 p[i]=0;
104 x2--;
105 i--;
106 TF=true; //2弹出栈,回溯
107 }
108 }
109 }
110 }
111 }
112 else //栈满,找到候选解
113 {
114 if (x2<=x1) //判断候选解是否为可行解
115 {
116 count++;
117 printf("第%d个排列:\n", count);
118 int j;
119 for (j=0; j<2*n; j++)
120 {
121 if (p[j]==2)
122 printf("%d ", j+1);
123 }
124 printf("\n"); //候选解为可行解,输出,count自增1
125
126 for (j=0; j<2*n; j++)
127 {
128 if (p[j]==1)
129 printf("%d ", j+1);
130 }
131 printf("\n");
132 }
133 p[i]=0;
134 x2--;
135 i--;
136 TF=true; //栈底2弹出栈回溯
137
138 }
139 }
140 printf("总共有%d个排列\n", count); //输出可行解总数
141 }
运行结果:
|