Chinaunix
标题:
谁能介绍一下关于 “八皇后”的算法及实现呀?
[打印本页]
作者:
y-masaki
时间:
2005-01-25 11:22
标题:
谁能介绍一下关于 “八皇后”的算法及实现呀?
谁能介绍一下关于 “八皇后”的算法及实现呀?
作者:
aero
时间:
2005-01-25 13:12
标题:
谁能介绍一下关于 “八皇后”的算法及实现呀?
最简单的就是试探,然后回溯。
作者:
guile
时间:
2005-01-25 13:26
标题:
谁能介绍一下关于 “八皇后”的算法及实现呀?
#include<vector>;
#include<iostream>;
using std::vector;
using std::cout;
using std::cin;
using std::endl;
void print(vector<int>; a,int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i]==j)
cout<<"1 ";
else
cout<<"0 ";
}
cout<<endl;
}
cout<<endl;
}
int queen(int n)
{
vector<int>; ivec(n);
int i=0,j=0,k=0,num=0;
ivec[0]=0;
while(i>;=0)
{
if(i==0)
{
i++;
ivec[i]=0;
k=0;
}
else if((ivec[i]==ivec[k])||(i-k==ivec[i]-ivec[k])||(k-i==ivec[i]-ivec[k]))
{
ivec[i]++;
k=0;
if(ivec[i]==n)
{
i--;
ivec[i]++;
if(ivec[i]==n)
{
i--;
if(i>;=0)
{
ivec[i]++;
}
}
}
}
else
{
k++;
if((i==k)&&(i==n-1))
{
num++;
print(ivec,n);
i--;
ivec[i]++;
if(ivec[i]==n)
{
i--;
if(i>;=0)
{
ivec[i]++;
}
}
k=0;
}
else if(i==k)
{
i++;
ivec[i]=0;
k=0;
}
}
}
return num;
}
int main()
{
int n,num;
cin>;>;n;
while(n>;0)
{
num=queen(n);
cout<<endl<<"There is "<<num<<" answers."<<endl;
cin>;>;n;
}
return 0;
}
复制代码
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2