八皇后问题
2014-10-14 09:56
218 查看
//八皇后问题
#include<iostream>
using namespace std;
const int N=8;
int solution
,sols=0;
int place(int row)
{
for(int i=0;i<row;i++)
{
if(row-solution[row]==i-solution[i]||row+solution[row]==i+solution[i]||
solution[row]==solution[i])//这里是两个斜队列和同一列,不存在同一行,因为每次都会递归加1
return 0;
}
return 1;
}
void queen(int row)
{
if(N==row)
{
sols++;
for(int i=0;i<N;i++)
cout<<solution[i]<<" ";
cout<<endl<<endl;
}
else
{
for(int i=0;i<N;i++)//这一排的皇后从第0列开始摆放
{
solution[row]=i;//这row个皇后放在第i列
if(place(row))//判断第row个之前的皇后与它是否发生冲突
queen(row+1);
}
}
}
int main()
{
queen(0);
cout<<"Total Solutions is: "<<sols<<endl;
return 0;
}
#include<iostream>
using namespace std;
const int N=8;
int solution
,sols=0;
int place(int row)
{
for(int i=0;i<row;i++)
{
if(row-solution[row]==i-solution[i]||row+solution[row]==i+solution[i]||
solution[row]==solution[i])//这里是两个斜队列和同一列,不存在同一行,因为每次都会递归加1
return 0;
}
return 1;
}
void queen(int row)
{
if(N==row)
{
sols++;
for(int i=0;i<N;i++)
cout<<solution[i]<<" ";
cout<<endl<<endl;
}
else
{
for(int i=0;i<N;i++)//这一排的皇后从第0列开始摆放
{
solution[row]=i;//这row个皇后放在第i列
if(place(row))//判断第row个之前的皇后与它是否发生冲突
queen(row+1);
}
}
}
int main()
{
queen(0);
cout<<"Total Solutions is: "<<sols<<endl;
return 0;
}