hdu1035 机器人走格子,格子指明方向,问几步走出格子或者是否有形成圈

只要根据格子的方向选择下一步搜索的方向即可,退出条件是出界或者进入环中,进入环中的条件也很好确定,就是一个点走了两次,由于路径是固定的,这就会陷入无限循环。

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 1005
using namespace std;
int n,m,c;
int k;
int step[maxn][maxn];
char map[maxn][maxn];
void dfs(int x,int y)
{
    if(x<0||x>=n||y<0||y>=m)
    {
        printf("%d step(s) to exit
",k);
        return;
    }
    if(step[x][y])
    {
        printf("%d step(s) before a loop of %d step(s)
",step[x][y]-1,k-step[x][y]+1);
        return;
    }
    if(map[x][y]=='N')
    {
        step[x][y]=++k;
        dfs(x-1,y);
    }
    if(map[x][y]=='S')
    {
        step[x][y]=++k;
        dfs(x+1,y);
    }
    if(map[x][y]=='E')
    {
        step[x][y]=++k;
        dfs(x,y+1);
    }
    if(map[x][y]=='W')
    {
        step[x][y]=++k;
        dfs(x,y-1);
    }
    return;
}
int main()
{
    while(cin>>n>>m>>c&&(m+n))
    {
        for(int i=0;i<n;i++)scanf("%s",&map[i]);
        memset(step,0,sizeof(step));
        k=0;
        dfs(0,c-1);
    }
}
原文地址:https://www.cnblogs.com/randy-lo/p/12384652.html