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

📄 main.cpp

📁 用DEV C++ 写的实现查找所有八皇后可能的算法。没有用递归
💻 CPP
字号:
/*
  Name: 没有数据结构版本的8皇后程序 
  Copyright: 
  Author: 夏敏 
  Date: 06-08-08 13:56
  Description: 意料之外的乱,开始以为会比较简单的,结果代码非常凌乱。 
  				写完之后我发现其实只用作一半的循环,后一半结果和前一半结果是对称的。 
*/

#include <iostream>
using namespace std;

//将不能放皇后的地方置1; 
void SetGrid(int i,int j,int Grid[8][8])
{
	i-=1;
	j-=1;
	for(int c=0;c<8;++c)
	{
		Grid[i][c]=1;
		Grid[c][j]=1;
		if(i+c<8&&j+c<8)
			Grid[i+c][j+c]=1;
		if(i-c>=0&&j-c>=0)
			Grid[i-c][j-c]=1;
		if(i-c>=0&&j+c<8)
			Grid[i-c][j+c]=1;
		if(i+c<8&&j-c>=0)
			Grid[i+c][j-c]=1;
	}
	
	return ;
}

//复制数组 
void SetGrid(int Grid1[8][8],int Grid2[8][8])
{
	for(int i=0;i<8;++i)
		for(int j=0;j<8;++j)
			Grid1[i][j]=Grid2[i][j];
	
	return ;
}

//复制数组 
void SetRow(int row1[8],int row2[8])
{
	for(int i=0;i<8;++i)
		row1[i]=row2[i];
	
	return ;
}

//显示被置为1的地方,检查置一函数用的。 
void ShowGrid(int Grid[8][8])
{
	for(int i=0;i<8;++i)
	{
		for(int j=0;j<8;++j)
		{
			if(Grid[i][j]==1)
				cout<<"*";
			else if(Grid[i][j]==0)
				cout<<" ";
		}
		cout<<endl;
	}
	return ;
}

//检验结果用的。。 
//int main()
//{
//	int Grid[8][8]={0};
//	SetGrid(1,3,Grid);
//	SetGrid(2,1,Grid);
//	SetGrid(3,7,Grid);
//	SetGrid(4,5,Grid);
//	SetGrid(5,8,Grid);
//	SetGrid(6,2,Grid);
//	SetGrid(7,4,Grid);
//	ShowGrid(Grid);
//	
//	system("pause");
//	return 0;
//}



//没有任何技巧,就这样把它写出来,感觉很乱,等会看书用个数据结构,希望会让我高兴一下。 
int main()
{
	int Grid[8][8]={0};
	int row[8]={0};
	for(int i1=0;i1<8;++i1)
	{
		int row1[8];
		int Grid1[8][8];
		SetRow(row1,row);
		SetGrid(Grid1,Grid);
		
		row1[0]=i1+1;
		SetGrid(1,i1+1,Grid1);

		for(int i2=0;i2<8;++i2)
		{
			int row2[8];
			int Grid2[8][8];
			SetRow(row2,row1);
			SetGrid(Grid2,Grid1);
			
			if(!Grid2[1][i2])
			{
				row2[1]=i2+1;
				SetGrid(2,i2+1,Grid2);
			}				
			
			if(row2[1]==0)
				continue;
			
			for(int i3=0;i3<8;++i3)
			{
				int row3[8];
				int Grid3[8][8];
				SetRow(row3,row2);
				SetGrid(Grid3,Grid2);
				
				if(!Grid3[2][i3])
				{
					row3[2]=i3+1;
					SetGrid(3,i3+1,Grid3);
				}
					
				if(row3[2]==0)
					continue;
					
				for(int i4=0;i4<8;++i4)
				{
					int row4[8];
					int Grid4[8][8];
					SetRow(row4,row3);
					SetGrid(Grid4,Grid3);
					
					if(!Grid4[3][i4])
					{
						row4[3]=i4+1;
						SetGrid(4,i4+1,Grid4);
					}
					
					if(row4[3]==0)
						continue;
						
					for(int i5=0;i5<8;++i5)
					{
						int row5[8];
						int Grid5[8][8];
						SetRow(row5,row4);
						SetGrid(Grid5,Grid4);
								
						if(!Grid5[4][i5])
						{
							row5[4]=i5+1;
							SetGrid(5,i5+1,Grid5);
						}
			
						if(row5[4]==0)
							continue;
							
						for(int i6=0;i6<8;++i6)
						{
							int row6[8];
							int Grid6[8][8];
							SetRow(row6,row5);
							SetGrid(Grid6,Grid5);
							
							if(!Grid6[5][i6])
							{
								row6[5]=i6+1;
								SetGrid(6,i6+1,Grid6);
							}
	
							if(row6[5]==0)
								continue;
								
							for(int i7=0;i7<8;++i7)
							{
								int row7[8];
								int Grid7[8][8];
								SetRow(row7,row6);
								SetGrid(Grid7,Grid6);
								
								if(!Grid7[6][i7])
								{
									row7[6]=i7+1;
									SetGrid(7,i7+1,Grid7);
								}
								
								if(row7[6]==0)
									continue;
								for(int i8=0;i8<8;++i8)
								{	
									if(!Grid7[7][i8])
									{
										row7[7]=i8+1;
										cout<<endl;
										for(int i=0;i<8;++i)
											cout<<row7[i];
									}
									else
										continue;
								}
							}
						}
					}
				}
			}
		}
	}
	
	system("pause");
	return 0;
}





					
			
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

⌨️ 快捷键说明

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