poj 1970 The Game

http://poj.org/problem?id=1970

image.png

注意点:实际上搜索四个方向就够了, 左上,右, 左下, 下
要注意六个点的情况,所以要沿着反向再查一下

//
// Created by ljs on 2018/8/28.
//
#include <iostream>
using namespace std;
int m = 19, n = 19;
int dir[4][4] = {{1, 0}, {-1, 1},{0, 1}, {1, 1}};
int count;
bool flag;
int maze[19][19];
void dfs(int x, int y, int cur, int maze[19][19], int d, int team){
    int xx = x + dir[d][0];
    int yy = y + dir[d][1];
    if(maze[xx][yy] == team && xx >= 0 && xx < m && yy >= 0 && yy < n ){
        count++;
        dfs(xx, yy, cur + 1, maze, d, team);
    }
}
int main(){
    int t;
    cin>>t;
    while(t--){
        for(int i = 0; i < 19; i++){
            for(int j = 0; j < 19; j++){
                cin>>maze[i][j];
            }
        }
        flag = false;
        count = 0;
        for(int i = 0; i < 19; i++){
            for(int j = 0; j < 19; j++){
                if(maze[i][j] != 0){
                    for(int d = 0 ; d < 4; d++) {
                        count = 1;
                        dfs(i, j, 1, maze, d, maze[i][j]);
                        if (count == 5 && maze[i - dir[d][0]][j - dir[d][1]] != maze[i][j]) {
                            cout << maze[i][j] << endl;
                            cout << i + 1 << " " << j + 1 << endl;
                            flag = true;
                            break;
                        }
                    }

                }
                if(flag) break;
            }
            if(flag) break;
        }
        if(!flag)
            cout<<0<<endl;
    }
    return 0;
}

推荐阅读更多精彩内容

  • 一个人经过不同程度的锻炼,就获得不同程度的修养、不同程度的效益,好比香料,捣得愈碎,磨得愈细,香得愈浓烈,...
    璃君阅读 678评论 0 7
  • 时间,早上7点25分,黑暗的房间中逐渐亮起温和的灯光,3分钟后,窗帘缓缓拉开,外面的阳光照射进来,又是明媚的一天。...
    孙其阅读 48评论 0 1
  • 曾几何时,我梦想仗剑走天涯,看一看这世界的繁华;曾几何时,我梦想遇到心爱的姑娘,陪她到地老天荒;曾几何时,...
    若修阅读 65评论 0 0