n后问题

来源:互联网 发布:人人美剧app for mac 编辑:程序博客网 时间:2024/05/19 13:25

   递归

#include<stdio.h>#include<stdlib.h>#include<math.h>#define N 4int Eq[10]={0},sum=0;int isTrue(int b){int i;for(i=1;i<b;i++){if(Eq[b]==Eq[i]||abs(Eq[b]-Eq[i])==abs(b-i))return 0;}return 1;}void traceBack2(int i){int j;if(i>N)sum++;else{for(j=1;j<=N;j++){Eq[i]=j;if(isTrue(i)){traceBack2(i+1);}}}}int main(){int i;for(i=1;i<=N;i++){Eq[1]=i;traceBack2(2);}printf("%d\n",sum);system("pause");return 0;}

非递归

#include<stdio.h>#include<stdlib.h>#include<math.h>int E[10]={0};int isOk(int b){int i;for(i=1;i<b;i++){if(E[b]==E[i]||abs(E[b]-E[i])==abs(b-i))return 0;}return 1;}int traceBack(int n){int k=1,sum=0,i;E[k]=1;while(k>=1){if(k<=n&&E[k]<=n){if(isOk(k)){k++;E[k]=1;}else{E[k]++;}}else{if(k>n){sum++;}k--;E[k]++;}}return sum;}int main(){int i,j,k;printf("%d\n",traceBack(8));system("pause");return 0;}


0 0
原创粉丝点击