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 ...
随机推荐
- [置顶] 递归 加引用 实现tree 和 无限级菜单
<?php class k_model_menu_menu { private $data = array(); private $rdata = array(); pr ...
- jquery中获取当前点击对象
jquery中获取当前点击对象的简单方法就是,在点击事件click中传入event对象 click(function(event)); 调用当前对象就是$(event.target);
- cocos2dx 3.1从零学习(一)——入门篇(一天学会打飞机)
没办法,浏览这么高,为啥没人投票呢?朋友们,我这篇文章參加了csdn博文大赛.喜欢的来点个赞吧!点击:http://vote.blog.csdn.net/Article/Details?article ...
- 玩转Bash脚本:test測试语句
总第1篇test就是測试的意思,经常使用在流程控制语句中作为条件.以下做一下介绍. 关于真值 与其它语言不同,Bash(包含其它Shell)中,是用0表示真,非0表示假的.之所以用0表示成功,而不是1 ...
- C链表操作
#define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <std ...
- Online DDL与pt-online-schema-change
http://seanlook.com/2016/05/24/mysql-online-ddl-concept/ http://seanlook.com/2016/05/27/mysql-pt-onl ...
- SparkGraphXTest.scala
/** * Created by root on 9/8/15. */ import org.apache.spark._ import org.apache.spark.graphx._ impor ...
- string2array($value);
/*** 将字符串转换为数组** @param string $data 字符串* @return array 返回数组格式,如果,data为空,则返回空数组*/if ( !function_exis ...
- 使用GPS经纬度定位附近地点(某一点范围内查询)
需要手机查找附近N米以内的商户,致想法是已知一个中心点,一个半径,求圆包含于圆抛物线里所有的点,经纬度是一个点,半径是一个距离,不能直接加减,下面提供C#的解决方法 数据库中记录了商家在百度标注的经纬 ...
- jQuery之父:每天都写点代码
去年秋天,我的“兼职编程项目”遇到了一些问题:要不是从 Khan Academy 的项目里挪出时间来的话,我根本没办法将不理想的进度弥补上. 这些项目遇到了一些严重的问题.之前的工作我主要是在周末,有 ...
