问题描述:
在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; } |