八皇后问题(递归回溯+迭代回溯)

        八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。当且仅当 n = 1 或 n ≥ 4 时问题有解。


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ms(x,y) memset(x,y,sizeof(x))
const int MAXN=1000+10;
const int INF=1<<30;
using namespace std;
int vis[MAXN][MAXN];
int c[60]; //c[i] 表示第i行的皇后所在的列号
int cnt;

/* -------------------------------------------------------------- */

void eight_queen(int cur, int n) //递归1
{
	int i, j, ok;
	if(cur == n) {
		cnt++;
		/*
		for(i=0; i= 0)
	{
		c[cur]++;
		while(c[cur] < n && !Judge(cur, c[cur], n)) //在该行寻找适合的列
			c[cur]++;
		if(c[cur] < n){
			if(cur == n - 1){
				cnt++;
				/*
				for(i=0; i


你可能感兴趣的:(搜索)