⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 八皇后.cpp

📁 数据结构常用算法
💻 CPP
字号:
#include<iostream.h>
#include<stdio.h>
int N=8; 
int weizhi[10][10]; 
int p=0; 
int buju(int x1,int y1) 
{
	int a1,b1; 
	for(a1=0;a1<x1;a1++)
	{ 
		for(b1=0;b1<N;b1++)
		{ 
			if(weizhi[a1][b1]==1)
			{    //有一个条件不符合则返回0
				if(a1==x1||b1==y1)   return 0; //在同一行或同一列,返回0
				if((a1-b1)==(x1-y1)) return 0; //同一对角线,返回0
				if((a1+b1)==(x1+y1)) return 0; //同一对角线,返回0
			} 
		} 
	} 
	return 1;      //满足三个条件则返回1
} 
int destroy(int w) 
{    
	int x,y; 
	for(x=0;x<N;x++) 
		if(weizhi[w][x]==1) //把每行的布局撤消
		{ 
			weizhi[w][x]=0; 
			y=x; 
		} 
		return y;
} 
int out() //输出
{
	int t,y;
	cout<<"八皇后布局为:"<<endl;
	cout<<"****************"<<endl;  
	p++; 
	for(t=0;t<N;t++)
	{ 
		for(y=0;y<N;y++)
		{ 
			cout<<weizhi[t][y]<<' ';  
		} 
		cout<<endl;
	} 
	cout<<endl<<"****** "<<p<<" ********"<<endl;
	getchar();
	return 0; 
} 
void main() 
{ 
	int m,n,i,j; 
	for(m=0;m<N;m++) 
		for(n=0;n<N;n++) 
			weizhi[m][n]=0; 
	m=0;n=0;j=0; 
	do
	{
		for(n=0;n<N;n++) 
		{ 
			i=buju(m,n); 
			if(m==N-1 && i==1)
			{  //布局完成并且合法时,输出当前棋盘
				weizhi[m][n]=1; //布局完成,位置合适,置1
				cout<<"键入回车键继续"<<endl;
				out();  //输出
			
				i=0;
				weizhi[m][n]=0;
			} 
			if(i==1)      //布局没完成,但位置合适,则置1
			{ weizhi[m][n]=1; break;} 
			if(n==N-1&&i==0) 
			{//如果排到最后没有合适布局,撤消以前的布局,重新再来
				do
				{ 
					m--; 
					n=destroy(m); 
					if(m==0 && n==N-1 && j==1) break; 
				}while(n>=N-1); 
			} 
		} 
		j=1; 
		m++; 
		if(m>=N)
			m=0; 
	}while(m<N&&n<N); 
	cout<<endl<<"********IT'S OVER!!********"<<endl; 
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -