codeforces 510B Fox And Two Dots(dfs)

http://codeforces.com/contest/510/problem/B

 

题意: n行 每行m个颜色 问相同的颜色能否构成环

 

思路: 对没vis过的位置dfs 一直到满足条件为止

 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
char mat[100][100];
int vis[100][100];
int n,m;
int ok;
int op[4][2]={0,1,0,-1,1,0,-1,0};
void dfs(int i,int j,int x,int y)
{
    if(ok) return ;
    vis[i][j]=1;
    for(int z=0;z<4;z++)
    {
        int nx=i+op[z][0];
        int ny=j+op[z][1];
        if(nx<0||nx>=n||ny<0||ny>=m) continue;
        if(mat[i][j]==mat[nx][ny])
        {
            if(vis[nx][ny]==1&&(nx!=x||ny!=y))
            {
              ok=1;
            }
            else if(vis[nx][ny]==0&&mat[i][j]==mat[nx][ny])
            dfs(nx,ny,i,j);
        }

    }
}
int main()
{
    //int n,m;
    int i,j,k;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(i=0;i<n;i++)
            scanf("%s",mat[i]);
        memset(vis,0,sizeof(vis));
        ok=0;        
        for(i=0;i<n;i++)
        {
            if(ok) break;
            for(j=0;j<m;j++)
            {
                if(!vis[i][j])
                dfs(i,j,-1,-1);
            }
        }
        if(ok) printf("Yes\n");
            else printf("No\n");
    }
    return 0;
}

 

posted @ 2015-03-05 22:33  sola94  阅读(137)  评论(0)    收藏  举报