您的位置:首页 > 其它

杭电 HOJ 2553 N皇后问题 解题报告

2013-02-25 20:54 323 查看
回溯法,经典题啊。发现很简单有木有。。。看代码~用数组保存sum值,否则会超时。杭电也够坑人的。。。

#include <iostream>
using namespace std;

int col[11],dia[21],evil[21];
int n,sum,s[11];

void DFS(int x)
{
int i;
if(x==n+1)
{
sum++;
return;
}
for(i=1;i<=n;i++)
{
if(!col[i] && !dia[x+i] && !evil[10+i-x])
{
col[i]=dia[x+i]=evil[10+i-x]=1;
DFS(x+1);
col[i]=dia[x+i]=evil[10+i-x]=0;
}
}
}

int main()
{
memset(s,0,sizeof(s));
while(cin>>n&&n)
{
if(!s
)
{
memset(col,0,sizeof(col));
memset(dia,0,sizeof(dia));
memset(evil,0,sizeof(evil));
sum=0;
DFS(1);
s
=sum;
}
cout<<s
<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: