五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,通常双方分别使用黑白两色的棋子,下在棋盘直线与横线的交叉点上,先形成55子连线者获胜。相传中华民族的祖先轩辕黄帝无意之中画下了十七条横线十七条竖线,这无意中的发明造就出了五子棋。现在,给出五子棋的一个局面,你需要判断白棋此时是否已经出现了五连珠。
输入
第一行是一个整数n。代表双方共下了n步棋。接下来n行,每行有三个整数x,y,v(1<=x,y<=19,1<=v<=2)。x,yx,y,v(1<=x,y<=19,1<=v<=2)。x,y代表下棋的坐标,v=1v=1代表下的是白棋,v=2v=2代表下的是黑棋。
输出
如果白棋出现了五连珠,则输出YES。否则输出NO。
样例
输入
9
3 1 1
3 2 1
3 3 1
3 4 1
3 5 1
2 1 2
2 2 2
2 3 2
2 4 2
输出:YES
public class 五子棋 {
public static void main(String[] args) {
Scanner sc=new Scanner(new InputStreamReader(System.in));
int n=sc.nextInt();
//x轴y轴 白棋/黑棋
int x,y,v;
int s=0;
int[][] arr=new int[20][20];
int[][] k={{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0},{-1,1}};
for (int i = 1; i <=n ; i++) {
x=sc.nextInt();
y=sc.nextInt();
v=sc.nextInt();
arr[x][y]=v;
}
for (int i = 1; i < 20; i++) {
for (int j = 1; j < 20; j++) {//遍历棋盘
if(arr[i][j]==1){//遇到白棋就八个方向搜索
for (int l = 0; l <8 ; l++) {//八个方向
int p=i;
int q=j;
s=1;
for (int m = 0; m < 20; m++) {
p+=k[l][0];
q+=k[l][1];
//注意边界问题
if(p<0||p>=20||q<0||q>=20||arr[p][q]!=1){
break;
}
s++;
}
if(s>=5){//足够五个直接return
System.out.println("YES");
return;
}
}
}
}
}
System.out.println("NO");
}
}