国际象棋中的国王,可以攻击相邻的8个位置(即上、下、左、右和左上,左下,右上,右下),现在给定一个N * M的棋盘,以及其中放置的K个国王的位置,请问他们是否能够互相攻击。
第一行:N M K——棋盘大小以及放置的国王数量(1<=n, m<=100, 0<=k<=200)
以后K行每行都包含两个值r和c,代表一个国王被放置在第r行第c列(棋盘的行序号从1到N,列序号从1到M)。
2014 Anhui College Student Programming Contest
1号程序员:唯有养猪才能致富 代码最简:褚申申(580) 效率最高:褚申申(1564) #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; }