(poj1.2.1)1970(筛选法模拟)
/* * 1970_1.cpp * * Created on: 2013年10月6日 * Author: Administrator */#include <iostream>#include <cstdio>using namespace std;int d[4][2] = {{0,1},{1,0},{1,1},{-1,1} };//方向矢量/** * 判断点(x,y)是否在边界里面 */bool valid(int x , int y){return (x >=0 && x < 19 && y >= 0 && y < 19);}int a [20][20];//棋盘int main(){int t;scanf("%d",&t);while(t--){int i,j,k,u;int x,y;for(i = 0 ; i < 19 ; ++i){for(j = 0 ; j < 19 ; ++j){scanf("%d",&a[i][j]);}}for(j = 0 ; j < 19 ; ++j){for(i = 0 ; i < 19 ; ++i){//这个必须要有,因为0表示的是该位置没有棋子,只有在有棋子的情况下,该位置才有意义if(a[i][j] == 0){continue;}for(k = 0 ; k < 4 ; ++k){//如果反方向同色,换方向x = i - d[k][0];y = j - d[k][1];if(valid(x,y) && a[x][y] == a[i][j]){continue;}//如果延伸5格后越界,换方向x = i + d[k][0]*4 ;y = j + d[k][1]*4;if(!valid(x,y)){continue;}//如果for(u = 0 ; u < 5 ; ++u){x = i + d[k][0]*u;y = j + d[k][1]*u;if(a[x][y] != a[i][j]){break;}}////如果5格同色,但6格也同色,也换方向x = i + d[k][0]*5;y = j + d[k][1]*5;if(valid(x,y) && a[x][y] == a[i][j]){continue;}//表示找到了5格同色但6个不同色的情况if(u == 5){break;}}if(k < 4){break;}}if(i < 19){break;}}if(j < 19){printf("%d\n",a[i][j]);printf("%d %d\n",i + 1, j + 1);}else{printf("0\n");}}}