首页 > 学院 > 开发设计 > 正文

八皇后问题

2019-11-06 07:13:58
字体:
来源:转载
供稿:网友

八皇后问题

一个8*8方盘,每个皇后不能再同一行、同一列、同一对角线上,我们可以忽略行(即不保存行,不申请二维数组),直接从第一行算,然后算第二行的皇后,maze[i] = j; 代表着第i行第j列有着一个皇后,我们直接从行开始算,每次判断是否有不符合规则的皇后,因为不计算行,所以 只需判断

(x == j)|| (maze[x] == maze[j])|| ((x - j) == (maze[x] - maze[j])) || ((j - x) == (maze[x] - maze[j]))

满足上面条件则不符合

代码如下:

#include<iostream>#include <cstring>using namespace std;const int N = 8; int maze[12], count = 0;void PRint(){	for(int i = 0; i < N; i++)	{		for(int j = 0; j < N; j++)		{			if(maze[i] == j)			{				cout << "1"; //<< "/t";			}			else			{				cout << "0"; //<< "/t";			}		}		cout << endl;	}	cout << endl; } void search(int x){	if(N == x)	{		print(); 		count++;		return ;	}	int Is_success;	for(int i=0;i<N;i++)  //列计算 	{		maze[x] = i;  //第X行第I列 		Is_success = 1;		for(int j = 0; j < x; j++)		{			if((x == j)//   || AND && 低于关系运算符				|| (maze[x] == maze[j])//   ! 高于关系运算符 				|| ((x - j) == (maze[x] - maze[j])) 				|| ((j - x) == (maze[x] - maze[j])))    			{				Is_success = 0;				break;			}								 		}		if(Is_success)		{			search(x+1);		}	}}int main(){	search(0);	cout << "total = " << count << endl;	return 0; }  

运行结果,总共92种解法


上一篇:静态代理

下一篇:STL求第k大的元素

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表