首页 > 其他 > 详细

AYOJ N皇后问题

时间:2014-03-16 22:25:02      阅读:755      评论:0      收藏:0      [点我收藏+]

题目描述

 

bubuko.com,布布扣
 1 #include<cstdio>
 2 #include<cstring>
 3 int count, N;
 4 int vis[3][40];
 5 void dfs(int c)
 6 {
 7     if(c == N){count++;return ;}
 8     for(int i=0; i<N; i++){//c行i列是否能放入
 9         if(vis[0][i] == 0 && vis[1][c+i] == 0 && vis[2][c-i+N] == 0){
10             vis[0][i] = vis[1][c+i] = vis[2][c-i+N] = 1;
11             dfs(c+1);
12             vis[0][i] = vis[1][c+i] = vis[2][c-i+N] = 0;
13         }
14     }
15 }
16 int main()
17 {
18     int a[]={0,1,0,0,2,10,4,40,92,352,724,2680,14200,73712,365596,2279184,14772512};
19     while(~scanf("%d", &N))
20     {
21         if(N==0)break;
22         //count = 0;
23         //memset(vis, 0, sizeof(vis));
24         //dfs(0);
25         //printf("%d\n", count);
26         printf("%d\n",a[N]);
27     }
28     return 0;
29 }
View Code

 

在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。
你的任务是,对于给定的N,求出有多少种合法的放置方法。

 

输入格式

共有若干行,每行一个正整数N≤16,表示棋盘和皇后的数量;如果N=0,表示结束。

输出

共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量。

样例输入

1
8
5
0

样例输出

1
92
10

AYOJ N皇后问题,布布扣,bubuko.com

AYOJ N皇后问题

原文:http://www.cnblogs.com/qiu520/p/3603673.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!