您的位置:首页 > 其它

HDU 2553N皇后问题

2012-03-10 17:17 218 查看
一看到此题想都没想就用简单的回溯,可是写好代码测试样里也通过已提交就是TLE;

后来请教了大神他说测试数据可能有多组单纯的输出可能会超时,好吧!我把每种情况都提前算好放在数组里

接收一个我就输出一个,这样提前就把N皇后给初始化,最后输出果断AC了。

#include<cstdio>
#include<iostream>

using namespace std;

int N, visit[3][30], tot, C[50];

void dfs(int cur,int N)
{
int i, j;
if(cur == N)
{
tot++;
return ;
}
else for(i=0; i<N; i++)
{
if(!visit[0][i] && !visit[1][cur+i] && !visit[2][cur-i+N])
{
visit[0][i] = visit[1][cur+i] = visit[2][cur-i+N] = 1;
dfs(cur+1,N);
visit[0][i] = visit[1][cur+i] = visit[2][cur-i+N] = 0;
}
}
}

void Init()
{
int i;
for(i=0; i<11; i++)
{
memset(visit,0,sizeof(visit));
tot = 0;
dfs(0,i);
C[i] = tot;
}
}
int main()
{
Init();
while(scanf("%d", &N) && N)
{
printf("%d\n", C
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: