题目描述
国际象棋中的国王,可以攻击相邻的8个位置(即上、下、左、右和左上,左下,右上,右下),现在给定一个N * M的棋盘,以及其中放置的K个国王的位置,请问他们是否能够互相攻击。
输入
第一行:N M K——棋盘大小以及放置的国王数量(1<=n, m<=100, 0<=k<=200)
以后K行每行都包含两个值r和c,代表一个国王被放置在第r行第c列(棋盘的行序号从1到N,列序号从1到M)。
输出
如果存在国王可以相互攻击,输出“YES”,否则输出“NO”。
样例输入
3 3 21 13 3
样例输出
NO
提示
来源
#include <iostream>
#include <cstdio>
using namespace std ;
int map[101][101]={0};
int dir[8][2]={0,1,1,0,0,-1,-1,0,1,1,-1,1,1,-1,-1,-1};
int main(){
int x,y,k,r,c;
int t=0;
scanf("%d%d%d", &x, &y, &k);
while(k--){
scanf("%d%d", &r, &c);
map[r][c]=1;
for(int i=0;i<8&&t==0;i++){
if(map[r+dir[i][0]][c+dir[i][1]])
t=1;
}
}
if(t==1)
printf("YES\n");
else
printf("NO\n");
return 0;
}