1 条题解

  • 0
    @ 2025-5-17 14:26:25

    这道题目只需要按照给出的指令,模拟虎头怪走动的位置(撞到墙不移动,只统计撞墙次数),然后判断是哪种情况,输出对应的结果即可。 需要注意的是,这道题目有两个坑点,有比较多的同学掉进去了。

    1.可以走到出口,需要输出的步数X是有效步数(撞墙的步数是无效的)。

    2.按照从上往下的要求,满足能够从起点走到出口,优先输出。注意,可能一开始撞墙次数超过k,但是能走到终点,也是需要输出Escaped in X steps!

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,k,sx,sy;
    char a[110][110],s[1010];
    int main()
    {
    	cin>>n>>m>>k;
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=1;j<=m;j++)
    		{
    			cin>>a[i][j];
    			if(a[i][j]=='S')
    			{
    				sx=i,sy=j;//获取起点的位置
    			}
    		}
    	}
    	
    	cin>>s+1;
    	int nowx=sx,nowy=sy,cnt=0;
    	for(int i=1;i<=strlen(s+1);i++)
    	{
    		int nx=nowx,ny=nowy;
    		//根据指令变换位置
    		if(s[i]=='U') nx--;
    		if(s[i]=='D') nx++;
    		if(s[i]=='L') ny--;
    		if(s[i]=='R') ny++;
    		
    		if(a[nx][ny]=='E')//碰到终点,直接逃出
    		{
    			printf("Escaped in %d steps!",i-cnt);//注意,输出有效步数,需要减去撞墙的步数
    			return 0;
    		}
    		
    		if(a[nx][ny]=='#')//碰到墙,统计撞墙次数
    		{
    			cnt++;
    		}
    		else//没撞到墙更新位置
    		{
    			nowx=nx,nowy=ny;
    		}
    	}
    	
    	if(cnt>k)//最后撞墙次数>k
    	{
    		printf("Hit wall");
    		return 0;
    	}
        //最后没有走出迷宫
    	printf("Finished at (%d,%d)",nowx,nowy);
    }
    • 1

    信息

    ID
    171
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    21
    已通过
    7
    上传者