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;

}

 

你可能感兴趣的:(codeforces)