CODEFORCES 197D Infinite Maze

来源:互联网 发布:视频图像分析算法 编辑:程序博客网 时间:2024/06/06 10:03

题目:http://codeforces.com/contest/197/problem/D

题意:在迷宫找一条可以循环的路,上下可以连接起来

分析:像一种贪吃蛇游戏,贪吃蛇可以从下面出去,从上面出来。。。找一条使得贪吃蛇不死亡的走法。若找得到输出Yes,否输出No

#include <bits/stdc++.h>using namespace std;int n,m,S[2];int num[1505][1505][2];bool s[1505][1505];int p[4][2] = {0,-1,1,0,0,1,-1,0};void dfs(int x,int y){    if(num[x%n][y%m][0] == -1 && num[x%n][y%m][1] == -1)    {        num[x%n][y%m][0] = x;num[x%n][y%m][1] = y;    }    else if(num[x%n][y%m][0] != x || num[x%n][y%m][1] != y)//此为或。。。检查了老久才发现    {        printf("Yes\n");        exit(0);    }    else        return ;    //printf("x = %d y = %d\n",x,y);    for(int i=0;i<4;i++)    {       if(s[(x+p[i][0])%n][(y+p[i][1])%m])        dfs(x+p[i][0],y+p[i][1]);    }}int main(){    scanf("%d %d",&n,&m);    char ch;    getchar();    for(int i=0;i<n;i++)    {        for(int j =0;j<m;j++)        {            ch = getchar();            if(ch == '.')                s[i][j] = true;            if(ch == 'S')            {                s[i][j] = true;                S[0] = i+n*m;//防止取模出现负值                S[1] = j+n*m;            }        }        getchar();    }    memset(num,-1,sizeof(num));dfs(S[0],S[1]);    //5 memset(num,false,sizeof(num));bfs(S[0],S[1]);     printf("No\n");    return 0;}


0 0
原创粉丝点击