N 皇后问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了N 皇后问题相关的知识,希望对你有一定的参考价值。
因为只有十组数据 , 为防止 一数据出现多次导致超时所以 打表
还是 挺简单的....
1 /* 2 就是考虑皇后放置的位置,对于每一行,我们需要枚举每个可以放置皇后的位置, 3 而且需要判断当前位置(第i行)是否满足条件,即判断这个位置是否与放置好的前i-1行的皇后的位置相冲突, 4 如果冲突,说明这个位置不合适;否则的话,就可以枚举下一行皇后的位置,直至第n行。 5 */ 6 #include<stdio.h> 7 #include<string.h> 8 9 int n,tmp; 10 int map[11]; 11 12 void DFS(int k) 13 { 14 int i,j,flag; 15 if(k==n+1) 16 { 17 tmp++; 18 return; 19 } 20 else 21 { 22 for(i=1;i<=n;++i) 23 { 24 map[k]=i; 25 flag=1; 26 for(j=1;j<k;++j) 27 { 28 if(map[j]==i||i-k==map[j]-j||i+k==map[j]+j) // 注:1、i=map[k] 2、不在同一条斜线的两点的含义是行标到对角线的的距离不相等 29 { 30 flag=0; 31 break; 32 } 33 } 34 if(flag) 35 DFS(k+1); 36 } 37 } 38 } 39 40 int main() 41 { 42 int i,m; 43 int ans[11]; 44 for(n=1;n<=10;++n) 45 { 46 tmp=0; 47 DFS(1); 48 ans[n]=tmp; 49 } 50 while(scanf("%d",&m),m) 51 { 52 printf("%d\n",ans[m]); 53 } 54 return 0; 55 }
关键就是 已用 行列的 记录和表达
以上是关于N 皇后问题的主要内容,如果未能解决你的问题,请参考以下文章