问题描述:
在8*8的棋盘上,放置8个皇后,使他们互相不攻击;
解析:
进行逐行放置,皇后肯定不会进行横向攻击,因此只需检查纵向和斜向是否会进行攻击即可
代码:
C++ Code
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
#include<bits/stdc++.h>
using namespace std; int Map[10],n=8; int tot; void print() { for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { if(Map[i]==j) printf("1 "); else printf("0 "); } printf("\n"); } } void sear(int cur) { if(cur==n) { tot++; print(); } for(int i=0;i<n;i++) { int ok=1; Map[cur]=i; ///尝试把第cur行的皇后放在第i列 for(int j=0;j<cur;j++)///检查是否和前面的皇后冲突 { if(Map[cur]==Map[j]||cur-Map[cur]==j-Map[j]||cur+Map[cur]==j+Map[j]) { ok=0; break; } } if(ok==1) sear(cur+1); } } int main() { tot=0; sear(0); printf("%d\n",tot); return 0; } |
1560

被折叠的 条评论
为什么被折叠?



