POJ 1573 Robot Motion

本文介绍了一种通过深度优先搜索解决迷宫中机器人路径模拟问题的方法。机器人根据棋盘上的指令移动,需判断是否能走出迷宫并计算行走步数。若陷入循环则输出循环前的步数和循环长度。

题意:给你一个棋盘,上面的字母代表机器人要走的方向。假设机器人能走出这个棋盘,则输出机器人所走的步数,否则输出该机器人在走向无限循环前所走的步数。及无限循环所要走的格子数

思路:直接模拟,没有思路(大神能够多考虑些思路)

AC代码:

#include<stdio.h>
#include<string.h>
char str[12][12];
int flag[12][12];
int r,c,s,sum,loop;
void  dfs(int x,int y)
{
    if(x>=r||y>=c||x<0||y<0){
        printf("%d step(s) to exit\n",sum);
        return ;
    }
    if(flag[x][y]==2)
    {
        printf("%d step(s) before a loop of %d step(s)\n",sum-loop,loop);
        return ;
    }
    if(str[x][y]=='E')
    {
        if(flag[x][y]==1)
            loop++;
        else
            sum+=1;
        flag[x][y]+=1;
        dfs(x,y+1);
    }
     else if(str[x][y]=='W')
    {
        if(flag[x][y]==1)
            loop++;
        else
            sum+=1;
        flag[x][y]+=1;
        dfs(x,y-1);
    }
    else if(str[x][y]=='S')
    {
        if(flag[x][y]==1)
            loop++;
        else
            sum+=1;
        flag[x][y]+=1;
        dfs(x+1,y);
    }
    else
    {
        if(flag[x][y]==1)
            loop++;
        else
            sum+=1;
        flag[x][y]+=1;
        dfs(x-1,y);
    }
}
int main()
{
    while(scanf("%d %d %d",&r,&c,&s)!=EOF)
    {
        if(r==0&&c==0&&s==0)break;
        sum=0;
        loop=0;
        int i,j;
        memset(str,0,sizeof(str));
        memset(flag,0,sizeof(flag));
        for(i=0;i<r;i++){
            getchar();
            scanf("%s",str[i]);
        }

        dfs(0,s-1);
    }
    return 0;
}


转载于:https://www.cnblogs.com/yutingliuyl/p/7295345.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值