蓝桥杯—迷宫(C语言解法)

题目描述

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

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

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

L表示走到左边的房间,
R表示走到右边的房间,
U表示走到上坡方向的房间,
D表示走到下坡方向的房间。
X 星球的居民有点懒,不愿意费力思考。他们更喜欢玩运气类的游戏。这个游戏也是如此!

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

迷宫地图如下:
UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR

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

思路

  1. 想要走出迷宫,不能往返走,即先D在U就无法走出去
  2. 可以每个点搜索一遍,记得在每次搜索之前要将存储是否走过该点的数组重新初始化
  3. !!! 注意D是x+1,U是x-1

代码

#include<stdio.h>
#include<string.h>
char ch[15][15];
int vis[15][15];
int res;
void dfs(int x,int y){
	if(x<0 || x>9 || y<0 || y>9){
		res++;
		return;
	}
	if(vis[x][y]) return;
	vis[x][y]=1;
	if(ch[x][y]=='D') dfs(x+1,y);
	if(ch[x][y]=='U') dfs(x-1,y);
	if(ch[x][y]=='L') dfs(x,y-1);
	if(ch[x][y]=='R') dfs(x,y+1);
}
int main(){
	int i,j;
	for(i=0;i<10;i++){
		for(j=0;j<10;j++){
			scanf("%c",&ch[i][j]);
			while(ch[i][j]=='\n') scanf("%c",&ch[i][j]);//!!!很重要,不然会把换行当字符读进去
		}
	}
	for(i=0;i<10;i++){
		for(j=0;j<10;j++){
			memset(vis,0,sizeof(vis));//!!很重要
			dfs(i,j);
		} 
	}
	printf("\n%d",res);
	return 0;
}
posted @ 2022-04-03 18:12  两颗不一样的西柚  阅读(326)  评论(0)    收藏  举报