Poj 3239 Solution to the n Queens Puzzle
1.Link:
http://poj.org/problem?id=3239
2.Content:
Solution to the n Queens Puzzle
Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3459 Accepted: 1273 Special Judge Description
The eight queens puzzle is the problem of putting eight chess queens on an 8 × 8 chessboard such that none of them is able to capture any other. The puzzle has been generalized to arbitrary n × n boards. Given n, you are to find a solution to the n queens puzzle.
Input
The input contains multiple test cases. Each test case consists of a single integer n between 8 and 300 (inclusive). A zero indicates the end of input.
Output
For each test case, output your solution on one line. The solution is a permutation of {1, 2, …, n}. The number in the ith place means the ith-column queen in placed in the row with that number.
Sample Input
8
0Sample Output
5 3 1 6 8 2 4 7Source
POJ Monthly--2007.06.03, Yao, Jinyu
3.Method:
一开始用8皇后的方法,发现算不出来。
只能通过搜索,可以利用构造法,自己也想不出来构造,所以直接套用了别人的构造公式
感觉没啥意义,直接就用别人的代码提交了,也算是完成一道题目了
构造方法:
http://www.cnblogs.com/rainydays/archive/2011/07/12/2104336.html
一、当n mod 6 != 2 且 n mod 6 != 3时,有一个解为:
2,4,6,8,...,n,1,3,5,7,...,n-1 (n为偶数)
2,4,6,8,...,n-1,1,3,5,7,...,n (n为奇数)
(上面序列第i个数为ai,表示在第i行ai列放一个皇后;...省略的序列中,相邻两数以2递增。下同)
二、当n mod 6 == 2 或 n mod 6 == 3时,
(当n为偶数,k=n/2;当n为奇数,k=(n-1)/2)
k,k+2,k+4,...,n,2,4,...,k-2,k+3,k+5,...,n-1,1,3,5,...,k+1 (k为偶数,n为偶数)
k,k+2,k+4,...,n-1,2,4,...,k-2,k+3,k+5,...,n-2,1,3,5,...,k+1,n (k为偶数,n为奇数)
k,k+2,k+4,...,n-1,1,3,5,...,k-2,k+3,...,n,2,4,...,k+1 (k为奇数,n为偶数)
k,k+2,k+4,...,n-2,1,3,5,...,k-2,k+3,...,n-1,2,4,...,k+1,n (k为奇数,n为奇数)第二种情况可以认为是,当n为奇数时用最后一个棋子占据最后一行的最后一个位置,然后用n-1个棋子去填充n-1的棋盘,这样就转化为了相同类型且n为偶数的问题。
若k为奇数,则数列的前半部分均为奇数,否则前半部分均为偶数。
4.Code:
http://blog.csdn.net/lyy289065406/article/details/6642789?reload
/*代码一:构造法*/ //Memory Time
//188K 16MS #include<iostream>
#include<cmath>
using namespace std; int main(int i)
{
int n; //皇后数
while(cin>>n)
{
if(!n)
break; if(n%!= && n%!=)
{
if(n%==) //n为偶数
{
for(i=;i<=n;i+=)
cout<<i<<' ';
for(i=;i<=n-;i+=)
cout<<i<<' ';
cout<<endl;
}
else //n为奇数
{
for(i=;i<=n-;i+=)
cout<<i<<' ';
for(i=;i<=n;i+=)
cout<<i<<' ';
cout<<endl;
}
}
else if(n%== || n%==)
{
if(n%==) //n为偶数
{
int k=n/;
if(k%==) //k为偶数
{
for(i=k;i<=n;i+=)
cout<<i<<' ';
for(i=;i<=k-;i+=)
cout<<i<<' ';
for(i=k+;i<=n-;i+=)
cout<<i<<' ';
for(i=;i<=k+;i+=)
cout<<i<<' ';
cout<<endl;
}
else //k为奇数
{
for(i=k;i<=n-;i+=)
cout<<i<<' ';
for(i=;i<=k-;i+=)
cout<<i<<' ';
for(i=k+;i<=n;i+=)
cout<<i<<' ';
for(i=;i<=k+;i+=)
cout<<i<<' ';
cout<<endl;
}
}
else //n为奇数
{
int k=(n-)/;
if(k%==) //k为偶数
{
for(i=k;i<=n-;i+=)
cout<<i<<' ';
for(i=;i<=k-;i+=)
cout<<i<<' ';
for(i=k+;i<=n-;i+=)
cout<<i<<' ';
for(i=;i<=k+;i+=)
cout<<i<<' ';
cout<<n<<endl;
}
else //k为奇数
{
for(i=k;i<=n-;i+=)
cout<<i<<' ';
for(i=;i<=k-;i+=)
cout<<i<<' ';
for(i=k+;i<=n-;i+=)
cout<<i<<' ';
for(i=;i<=k+;i+=)
cout<<i<<' ';
cout<<n<<endl;
}
}
}
}
return ;
}
Poj 3239 Solution to the n Queens Puzzle的更多相关文章
- Pat1128:N Queens Puzzle
1128. N Queens Puzzle (20) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The & ...
- PAT 1128 N Queens Puzzle
1128 N Queens Puzzle (20 分) The "eight queens puzzle" is the problem of placing eight ch ...
- A1128. N Queens Puzzle
The "eight queens puzzle" is the problem of placing eight chess queens on an 8×8 chessboar ...
- PAT A1128 N Queens Puzzle (20 分)——数学题
The "eight queens puzzle" is the problem of placing eight chess queens on an 8×8 chessboar ...
- PAT甲级 1128. N Queens Puzzle (20)
1128. N Queens Puzzle (20) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The & ...
- PAT 1128 N Queens Puzzle[对角线判断]
1128 N Queens Puzzle(20 分) The "eight queens puzzle" is the problem of placing eight chess ...
- PAT 甲级 1128 N Queens Puzzle
https://pintia.cn/problem-sets/994805342720868352/problems/994805348915855360 The "eight queens ...
- 1128 N Queens Puzzle (20 分)
The "eight queens puzzle" is the problem of placing eight chess queens on an 8 chessboard ...
- PAT_A1128#N Queens Puzzle
Source: PAT A1128 N Queens Puzzle (20 分) Description: The "eight queens puzzle" is the pro ...
随机推荐
- delphi TPopupMenu.Popup
procedure TPopupMenu.Popup(X, Y: Integer); 这个点是相对桌面的而不是窗体的 GetCursorPos是鼠标的位置 鼠标动这个点就不一样 v ...
- Java I/O输入输出流详解
一.文件的编码 开发时一定要注意项目默认的编码!!!!!!!! 文件操作的时候一定要记得关闭!!!!!!!! ASCII:美国标准 ...
- rand值出现负数的解决方案
当rand($number)或者mt_rand($number)的时候,$number太大,超过pow(2,31) - 1;即整型最大值的时候,会出现负数. 如果只是单纯转换成整数而已的话,可以采用s ...
- shared_ptr的简单实现
前面讲到auto_ptr有个很大的缺陷就是所有权的转移,就是一个对象的内存块只能被一个智能指针对象所拥有.但我们有些时候希望共用那个内存块.于是C++ 11标准中有了shared_ptr这样的智能指针 ...
- 设置EXCEL2010打开多个独立窗口
最近发现一个奇怪的问题,发现office中的word和ppt在我使用笔记本分屏幕(双屏)的时候都可以将2份文档分别在2个窗口打开,但是在使用excel的时候却发现不行,最后研究发现原因 ...
- redis终于有比较大的进展了,redis3.0.1 稳定版本发布,支持集群。
原文地址:https://raw.githubusercontent.com/antirez/redis/3.0/00-RELEASENOTES Redis 3.0 release notes --[ ...
- org.apache.hadoop.fs-PositionedReadable
package org.apache.hadoop.fs; import java.io.*; import org.apache.hadoop.fs.*; /** Stream that permi ...
- Football
Football Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2882 Accepted: 1466 Descript ...
- this的分析
this是js中的一个关键字,当函数运行时,会自动生成的一个对象,只能在函数内部使用.随着函使用场合不同,this值会变化,但是始终指向调用函数的那个对象. 1.纯粹的函数调用 function bo ...
- ASP.NET MVC 下载列表
在ASP.NET WebForm里要想网站某个文件夹的文件列出来供用户下载似乎很简单,WebForm帮你做了很多事,只需要在Html文件里写: <a href="~/download/ ...
