首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

(poj1.2.1)1970(淘选法模拟)

2013-10-06 
(poj1.2.1)1970(筛选法模拟)/* * 1970_1.cpp * *Created on: 2013年10月6日 *Author: Administrator */#in

(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");}}}

热点排行