全排列与八皇后的转化

来源:互联网 发布:双11销售额包括淘宝吗 编辑:程序博客网 时间:2024/05/02 03:04

这个来自我以前做的一个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;}


0 0