PKU 1573 Robot Motion(简单模拟)

本文详细解析了一种基于矩阵和方向字母的迷宫逃脱算法,通过判断路径可行性及记录步数,实现从任意起点成功找到出口或确定环路的存在。文章提供了一个C++实现示例,展示了如何使用布尔数组跟踪已访问位置,避免无限循环,并计算到达出口或进入环路前的步数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原题大意:原题链接

给出一个矩阵(矩阵中的元素均为方向英文字母),和人的初始位置,问是否能根据这些英文字母走出矩阵.(因为有可能形成环而走不出去)

此题虽然属于水题,但是完全独立完成而且直接1A还是很开心的

注意:对于形成环的情况则从进入环的交点处重新走一遍,记录步数即可

#include<cstdio>
#include<cstring>
int n,m,p;
bool vis[1010][1010];
char str[1010][1010];
bool can(int x,int y)
{
    if(x<1||x>n||y<1||y>m||vis[x][y])
        return false;
    return true;
}
int main()
{
    while(scanf("%d%d%d",&n,&m,&p),n|m|p){
        memset(vis,0,sizeof(vis));
        getchar();
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++)
                scanf("%c",&str[i][j]);
            getchar();
        }
        int x=1,y=p,step1=0;
        while(can(x,y)){
            int px=x,py=y;
            vis[px][py]=1;
            if(str[px][py]=='E')
                {y++,step1++;}
            else if(str[px][py]=='S')
                {x++,step1++;}
            else if(str[px][py]=='W')
                {y--,step1++;}
            else if(str[x][y]=='N')
                {x--,step1++;}
        }
        if(vis[x][y]){
            int step2=0,ox=x,oy=y;
            while(1){
                int px=x,py=y;
                if(str[px][py]=='E')
                    {y++,step2++;}
                else if(str[px][py]=='S')
                    {x++,step2++;}
                else if(str[px][py]=='W')
                    {y--,step2++;}
                else if(str[px][py]=='N')
                    {x--,step2++;}
                if(x==ox&&y==oy){
                    printf("%d step(s) before a loop of %d step(s)\n",step1-step2,step2);
                    break;
                }
            }
        } 
        else printf("%d step(s) to exit\n",step1);
    }
} 

 

转载于:https://www.cnblogs.com/freinds/p/6481463.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值