这个来自我以前做的一个ppt,我把内容原封不动地复制下来,以防它被挟裹在纷杂的文件乱流之中而音讯全无。以前它的标题是递归与分治。
#include <stdio.h>
void tower(int n,int start,int end){
if(n==1) {printf("(%d->%d) ",start,end);return;}
tower(n-1,start,6-start-end);
printf("(%d->%d) ",start,end);
tower(n-1,6-start-end,end);
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
tower(n,1,3);
printf("\n");
}
return 0;
}
#include <stdio.h>
#include <string.h>
int flag[20],num,sto[20];
void arrange(int n){
int i;
if(n>num){
for(i=1;i<=num;i++) printf("%d ",sto[i]);
printf("\n");
}
for(i=1;i<=num;i++){
if(flag[i]) continue;
flag[i]=1;sto[n]=i;
arrange(n+1);
flag[i]=0;
}
}
int main(){
memset(flag,0,sizeof(flag));
while(scanf("%d",&num)!=EOF){
arrange(1);
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int flag[20],num,sto[20],cont;
void arrange(int n){
int i,j;
if(n>num){
for(i=1;i<=num;i++)
for(j=i+1;j<=num;j++)
if(j-i==abs(sto[j]-sto[i])) return;
for(i=1;i<=num;i++) printf("%d ",sto[i]);
printf("\n");cont++;
}
for(i=1;i<=num;i++){
if(flag[i]) continue;
flag[i]=1;sto[n]=i;
arrange(n+1);
flag[i]=0;
}
}
int main(){
memset(flag,0,sizeof(flag));
while(scanf("%d",&num)!=EOF){
cont=0;
arrange(1);
printf("The number of %d queens puzzle are %d\n",num,cont);
}
return 0;
}