HDU 2553N皇后问题

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

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

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

 1 #include<cstdio>
2 #include<iostream>
3
4 using namespace std;
5
6 int N, visit[3][30], tot, C[50];
7
8 void dfs(int cur,int N)
9 {
10 int i, j;
11 if(cur == N)
12 {
13 tot++;
14 return ;
15 }
16 else for(i=0; i<N; i++)
17 {
18 if(!visit[0][i] && !visit[1][cur+i] && !visit[2][cur-i+N])
19 {
20 visit[0][i] = visit[1][cur+i] = visit[2][cur-i+N] = 1;
21 dfs(cur+1,N);
22 visit[0][i] = visit[1][cur+i] = visit[2][cur-i+N] = 0;
23 }
24 }
25 }
26
27 void Init()
28 {
29 int i;
30 for(i=0; i<11; i++)
31 {
32 memset(visit,0,sizeof(visit));
33 tot = 0;
34 dfs(0,i);
35 C[i] = tot;
36 }
37 }
38 int main()
39 {
40 Init();
41 while(scanf("%d", &N) && N)
42 {
43 printf("%d\n", C[N]);
44 }
45 return 0;
46 }
47
posted @ 2012-03-10 17:17  zhongya  阅读(143)  评论(0编辑  收藏  举报