简单说明一下N皇后的解决思路。
1.初始化棋盘,即建立一个一维数组,储存一个初值(不是0到N-1就行);
2.寻找N皇后:a.判断皇后是否可以放置...而要想让皇后可以被放置,就必须满足皇后与皇后之间没有行冲突,列冲突,对角线冲突。那么首先想到的思路就是将你放置在该行该列的皇后与前面已经放置的皇后进行冲突检测,只要有一个冲突了,则该皇后就不能被放置。
b.回溯...如果该皇后不能在当前行当前列放置,则应该将该皇后往后移,直到当前行的所有列都检测完了,还不能放置皇后的话,就应该回溯到上一行,将上一行的皇后往后移,如果后移的皇后不能放置的话,继续回溯,直到可以被放置。一旦放置成功就顺推,直到最后一行。
c.结束...当顺推到最后一行时,回溯从最后一行开始,逐步将每一行的所有列都进行检测,直到回溯到第一行,则说明已经找到所有解。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define Queen 8
#define CHUZHI -1
int a[Queen];
void init(){//第一步完成棋盘的初始化
int *p;
for(p=a;p<a+Queen;++p)
*p=CHUZHI;
}
int valid(int row,int col){//判断皇后是否可以放置
for(int i=0;i<=row;i++) //检测前ro