迷宫(蓝桥杯题库)

文章提供了一个编程问题的详细描述,涉及一个10x10的迷宫,玩家根据地板上的LRUD指示移动。给定一个具体的迷宫地图,任务是通过编写代码计算在一系列移动后能走出迷宫的玩家数量。提供的C语言代码示例遍历所有初始位置并检查玩家是否能离开迷宫范围。

题目描述

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

X 星球的一处迷宫游乐场建在某个小山坡上。它是由 10×10 相互连通的小房间组成的。

房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则:

  • L 表示走到左边的房间,
  • R 表示走到右边的房间,
  • U 表示走到上坡方向的房间,
  • D 表示走到下坡方向的房间。

X 星球的居民有点懒,不愿意费力思考。他们更喜欢玩运气类的游戏。这个游戏也是如此!

开始的时候,直升机把 100 名玩家放入一个个小房间内。玩家一定要按照地上的字母移动。

迷宫地图如下:

UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR

请你计算一下,最后,有多少玩家会走出迷宫,而不是在里边兜圈子?

如果你还没明白游戏规则,可以参看下面一个简化的 4x4 迷宫的解说图:

问题分析

将这一个迷宫的每一个节点转换成一个二维的字符数组,这样每一个节点的字符值决定了这一个人走向下面哪一个节点,U对应的是行标减D对应的是行标加,L对应的是列标减,R对应的是列标加,这样我们就确定了每一个小人行进的规则,按照规则,走出迷宫的条件应为r<0||r>9或者c<0||c>9我们确定好规则之后开始实现程序代码

代码实现

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  char str[]="UDDLUULRULUURLLLRRRURRUURLDLRDRUDDDDUUUUURUDLLRRUUDURLRLDLRLULLURLLRDURDLULLRDDDUUDDUDUDLLULRDLUURRR";
  char x[10][10];
  for(int i=0;i<10;i++){
    for(int j=0;j<10;j++){
      x[i][j]=str[i*10+j];//懒得一个一个对二维平面的每一个进行赋值,直接采用for循环简单便捷
    }
  }
  int r,c,count=0;
  for(int i=0;i<10;i++){
    for(int j=0;j<10;j++){//现在对处在(i,j)位置的玩家进行移动
      r=i,c=j;
      //如果能够走出去,所需要的步数小于等于房间的个数,否则走不出去
      for(int k=0;k<10*100;k++){
        switch(x[r][c]){
          case 'U':
            r--;
            break;
          case 'D':
            r++;
            break;
          case 'L':
            c--;
            break;
          case 'R':
            c++;
            break;
        }
        if(r<0||r>9||c<0||c>9){
          count++;
          break;
        }
      }
    }
  }
  printf("%d",count);
  return 0;
}

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值