📄 main.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 + -