(水题 NUPT 1593)8皇后问题(判断是否有元素处于同一行或同一列或

题目:

8皇后问题

时间限制(普通/Java):2000 MS/6000 MS 运行内存限制 : 65536 KByte总提交 : 1116 测试通过 : 137

题目描述

在8×8格的国际象棋上摆放八个皇后,请你判断她们是否互相攻击,即任意两个皇后都处于同一行、或同一列或同一斜线上。

输入

输入包含多个测试用例(不超过104)。先给出测试用例数。然后是每个测试用例。每个测试用例包括8行,每一行用8个字符表示棋盘上皇后放置情况,“Q”代表皇后,“#”代表空。

输出

对于每个测试用例,输出一行,依次包含:

l“Case #:”,#表示序号

l如果测试用例中的八个皇后互相攻击,输出Yes,否则输出No

样例输入

2Q##########Q#########Q####Q############Q####Q#########Q###Q############Q###Q####Q#########Q##########Q###Q############Q#####Q###

样例输出

Case1:YesCase2:No

提示

题目来源

NUPT

题目分析:

简单题。因为一开始漏掉了判断是否同一斜线的情况,,所以那个判断是否在同一些线上是后来才加上的。所以显得有点乱。不过AC还是没问题的。

代码如下:

/* * aa2.cpp * * Created on: 2015年3月24日 *Author: Administrator */#include <iostream>#include <cstdio>#include <cmath>using namespace std;const int maxn = 8;struct Point{int x;int y;}points[maxn];char map[maxn+1][maxn+1];bool visited[maxn];int main(){int t;scanf("%d",&t);int kk;for(kk = 1 ; kk <= t ; ++kk){//printf("Case %d:",kk);memset(visited,false,sizeof(visited));int i;for(i = 0 ; i < maxn ; ++i){scanf("%s",&map[i]);}bool flag = true;//判断是否有特定元素处于同一列int j;for(i = 0 ; i < maxn ; ++i){for(j = 0 ; j < maxn ; ++j){if(map[i][j] == ‘Q’){points[i].x = i;points[i].y = j;if(visited[j] == false){visited[j] = true;}else{flag = false;}break;}}if(flag == false){break;}}//判断是否有特定元素处于同一斜线上(这个判断千万不能漏.否则会WA)if(flag == true){for(i = 0 ; i < maxn ; ++i){for(j = i+1 ; j < maxn ; ++j){if(fabs(points[i].x – points[j].x) == fabs(points[i].y – points[j].y)){flag = false;}}}}if(flag == true){printf("Case %d: No\n",kk);}else{printf("Case %d: Yes\n",kk);}}return 0;}

只有这样才不会被“不可能”束缚,才能不断超越自我。

(水题 NUPT 1593)8皇后问题(判断是否有元素处于同一行或同一列或

相关文章:

你感兴趣的文章:

标签云: