题意:
有八个来自国际象棋的皇后,要站在同一个棋盘上,有什么办法能让她们不互相吃掉?
皇后可以横着走,竖着走,斜着走。。。。
思路:
深搜,判断条件就是会不会打到之前的皇后,一旦摆满8个就可以输出。
首先要3个数组,第一,二个因为斜着可以往左上和右上两种,所以要开俩个数组,第三个数组就是判断这一例有没有皇后。
行就不需要了,我们只要一行一行放就可以了。
先解释斜着为什么需要俩个数组。
我相信大家可以理解我的
画技。。。。。。。。。。。
总之就是这个意思
然后就看看程序吧:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int sc(int); int print(); int map[9][9]={0},a[9]={0},b[9]={0},c[9]={0}; int sc(int dep)//dep表示第几个皇后 { int j; for (j=1;j<=8;j++) //只有八列,所以 if ((a[dep+j]==0)&&(b[j]==0)&&(c[dep-j+7]==0)) { map[dep][j]=1;//表示这里有一个皇后,后面输出用。 b[j]=1; a[dep+j]=1; c[dep-j+7]=1;//加7避免到负数 if (dep==8) print(); else sc(dep+1); b[j]=0; a[dep+j]=0; c[dep-j+7]=0; map[dep][j]=0; } } int main() { sc(1); } int print() { for (int i=1;i<9;i++) { for (int j=1; j<9;j++) { //cout<<map[i,j]<<' ';// 俩种输出方式 printf("%d ",map[i][j]); } cout<<endl; } }