[OpenJudge] 百练2754 八皇后

八皇后





Description

会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 *
8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。 
对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数。已经知道8皇后问题一共有92组解(即92个不同的皇后串)。
给出一个数b,要求输出第b个串。串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小。

Input

第1行是测试数据的组数n,后面跟着n行输入。每组测试数据占1行,包括一个正整数b(1 <= b <= 92)

Output

输出有n行,每行输出对应一个输入。输出应是一个正整数,是对应于b的皇后串。

Sample Input

2
1
92

Sample Output

15863724
84136275

题解:回溯法的应用。注意判断对角线之前是否存在皇后的方法。

题目地址:http://bailian.openjudge.cn/practice/2754/

代码:


 1 #include<stdio.h>
2 #include<string.h>
3 #include<stdbool.h>
4
5 int i,j,n,m,num,
6 a[10],b[100][10];
7
8 bool f[3][50];
9
10 int
11 pre()
12 {
13 memset(f,1,sizeof(f));
14 memset(a,0,sizeof(a));
15 memset(b,0,sizeof(b));
16 num=0;
17 return 0;
18 }
19
20 void
21 dfs(int x)
22 {
23 int i;
24 if(x==9)
25 {
26 num++;
27 for(i=1;i<=8;i++)
28 b[num][i]=a[i];
29 }
30
31 for(i=1;i<=8;i++)
32 if (f[0][i]&&f[1][x+i]&&f[2][x-i+8])
33 {
34 a[x]=i;
35 f[0][i]=f[1][x+i]=f[2][x-i+8]=0;
36 dfs(x+1);
37 f[0][i]=f[1][x+i]=f[2][x-i+8]=1;
38 }
39 }
40
41 int
42 main()
43 {
44 int cas,i;
45 scanf("%d",&cas);
46 pre();
47 dfs(1);
48 while(cas--)
49 {
50 scanf("%d",&n);
51 for(i=1;i<=8;i++)
52 printf("%d",b[n][i]);
53 printf("\n");
54 }
55 return 0;
56 }


 

[OpenJudge] 百练2754 八皇后,布布扣,bubuko.com

时间: 2024-12-26 03:08:08

[OpenJudge] 百练2754 八皇后的相关文章

百练 2754 八皇后 (DFS)

2754:八皇后 总时间限制: 1000ms 内存限制: 65536kB 描述 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数.已经知道8皇后问题一共有92组解(即92个不同的皇后串). 给出一个数b,要求输出第b个串.串的比较是这样的:皇后串x置

bailian 2754八皇后

Description 会下国际象棋的人都很清楚:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子. 如何将8个皇后放在棋盘上(有8 * 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题. 对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对应,即a=b1b2...b8,其中bi为相应摆法中第i行皇后所处的列数. 已经知道8皇后问题一共有92组解(即92个不同的皇后串). 给出一个数b,要求输出第b个串. 串的比较是这样的:皇后串x置于皇后串y之前,当且仅当将x视为整数时比y小. I

Openjudge 百练 / 2524 - 宗教信仰 [并查集]

URL: http://bailian.openjudge.cn/practice/2524/ [描述] 世界上有许多宗教,你感兴趣的是你学校里的同学信仰多少种宗教. 你的学校有n名学生(0 < n <= 50000),你不太可能询问每个人的宗教信仰,因为他们不太愿意透露.但是当你同时找到2名学生,他们却愿意告诉你他们是否信仰同一宗教,你可以通过很多这样的询问估算学校里的宗教数目的上限.你可以认为每名学生只会信仰最多一种宗教. [输入] 输入包括多组数据. 每组数据的第一行包括n和m,0 &l

Poj OpenJudge 百练 1860 Currency Exchang

1.Link: http://poj.org/problem?id=1860 http://bailian.openjudge.cn/practice/1860 2.Content: Currency Exchange Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 20706   Accepted: 7428 Description Several currency exchange points are working

Poj OpenJudge 百练 2602 Superlong sums

1.Link: http://poj.org/problem?id=2602 http://bailian.openjudge.cn/practice/2602/ 2.Content: Superlong sums Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 22337   Accepted: 6577 Description The creators of a new programming language D++

Openjudge 百练第4109题

1 # -*- coding:utf-8 -*- 2 3 def set_1(i, q): 4 ''' generate a i*i ARRAY for all relationships 5 if there is a relation set 1 or 0 6 return i*i ARRAY with 1 or 0 7 ''' 8 a = [0 for i in range(i*i)] 9 for j in range(len(q)): 10 n, m = q[j] 11 a[(n-1)*

Poj OpenJudge 百练 2389 Bull Math

1.Link: http://poj.org/problem?id=2389 http://bailian.openjudge.cn/practice/2389/ 2.Content: Bull Math Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 13067   Accepted: 6736 Description Bulls are so much better at math than the cows. The

Poj OpenJudge 百练 1062 昂贵的聘礼

1.Link: http://poj.org/problem?id=1062 http://bailian.openjudge.cn/practice/1062/ 2.Content: 昂贵的聘礼 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 37631   Accepted: 10872 Description 年轻的探险家来到了一个印第安部落里.在那里他和酋长的女儿相爱了,于是便向酋长去求亲.酋长要他用10000个金

Poj OpenJudge 百练 1573 Robot Motion

1.Link: http://poj.org/problem?id=1573 http://bailian.openjudge.cn/practice/1573/ 2.Content: Robot Motion Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 10856   Accepted: 5260 Description A robot has been programmed to follow the instru