比赛描述
在8×8格的国际象棋上摆放八个皇后,请你判断她们是否互相攻击,即任意两个皇后都处于同一行、或同一列或同一斜线上。
输入
输入包含多个测试用例(不超过104)。先给出测试用例数。然后是每个测试用例。每个测试用例包括8行,每一行用8个字符表示棋盘上皇后放置情况,“Q”代表皇后,“#”代表空。
输出
对于每个测试用例,输出一行,依次包含:
l “Case #: ”,#表示序号
l 如果测试用例中的八个皇后互相攻击,输出Yes,否则输出No
样例输入
2
Q#######
###Q####
#####Q##
##Q#####
#######Q
####Q###
######Q#
##Q#####
#######Q
###Q####
Q#######
##Q#####
#####Q##
#Q######
######Q#
####Q###
样例输出
Case 1: Yes
Case 2: No
提示
题目来源
NUPT
#include<iostream> #define N 8 using namespace std; bool isDanger(int row,int col,char chess[N][N]){ int i,j; //判断同一列 for(i=0,j=col;i<N;++i){ if(i!=row && 'Q'==chess[i][j]){ return 1; } } //判断同一行 for(i=row,j=0;j<N;++j){ if(j!=col && 'Q'==chess[i][j]){ return 1; } } //判断左上方 for(i=row-1,j=col-1;i>=0,j>=0;--i,--j){ if('Q'==chess[i][j]){ return 1; } } //判断右上方 for(i=row-1,j=col+1;i>=0,j<N;--i,++j){ if('Q'==chess[i][j]){ return 1; } } //判断右下方 for(i=row+1,j=col+1;i<N,j<N;++i,++j){ if('Q'==chess[i][j]){ return 1; } } //判断左下方 for(i=row+1,j=col-1;i<N,j>=0;++i,--j){ if('Q'==chess[i][j]){ return 1; } } return 0; } bool willAttack(char chess[N][N]){ int i,j; for(i=0;i<N;++i){ for(j=0;j<N;++j){ if('Q'==chess[i][j] && isDanger(i,j,chess)){ return 1; } } } return 0; } int main(){ char chess[N][N]; int i,j,n,m; cin>>n; for(m=1;m<=n;++m){ for(i=0;i<N;++i){ for(j=0;j<N;++j){ cin>>chess[i][j]; } } cout<<"Case "<<m<<": "; if(willAttack(chess)){ cout<<"Yes"<<endl; }else{ cout<<"No"<<endl; } } }