【蓝桥杯】迷宫(吴大帅)2020-1-25

1.迷宫

1.1题目描述
X星球的一处迷宫游乐场建在某个小山坡上。它是由10x10相互连通的小房间组成的。
房间的地板上写着一个很大的字母。我们假设玩家是面朝上坡的方向站立,则:
L表示走到左边的房间,R表示走到右边的房间,U表示走到上坡方向的房间,D表示走到下坡方向的房间。
X星球的居民有点懒,不愿意费力思考。他们更喜欢玩运气类的游戏。这个游戏也是如此!
开始的时候,直升机把100名玩家放入一个个小房间内。玩家一定要按照地上的字母移动。
迷宫地图如下:

UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR

请你计算一下,最后,有多少玩家会走出迷宫? 而不是在里边兜圈子。
输出:输出一个答案
为方便理解,可参考此图

在这里插入图片描述

1.2解题思路

这道题要用到dfs,对于一百个点都要遍历过去,每一个点遍历之前都要初始化visited数组来记录走过的点,从而知道有没有在兜圈子,一查到在兜圈子立即返回,继续下一个点,如果深度搜索到了出(也就是出现坐标-1或者10的时候,说明当前遍历的点是一个答案

代码

#include<bits/stdc++.h>
using namespace std;
char s[10][10]={
					  'U','D','D','L','U','U','L','R','U','L',
					  'U','U','R','L','L','L','R','R','R','U',
					  'R','R','U','U','R','L','D','L','R','D',
					  'R','U','D','D','D','D','U','U','U','U',
					  'U','R','U','D','L','L','R','R','U','U',
					  'D','U','R','L','R','L','D','L','R','L',
					  'U','L','L','U','R','L','L','R','D','U',
					  'R','D','L','U','L','L','R','D','D','D',
					  'U','U','D','D','U','D','U','D','L','L',
					  'U','L','R','D','L','U','U','R','R','R'//1 先把这个10*10的数组写好
};
int visited[10][10];
int ans;
void dfs(int i,int j)
{
    if(i<0||i>9||j<0||j>9)//找到了出口
    {
        ans++;
        return;
    }
    else{
        if(visited[i][j])//说明在兜圈子,这个点不行
        return;
        else{
            visited[i][j]=1;
            if(s[i][j]=='D') dfs(i+1,j);
            if(s[i][j]=='U') dfs(i-1,j);
            if(s[i][j]=='L') dfs(i,j-1);
            if(s[i][j]=='R') dfs(i,j+1);

        }
    }
}
int main()
{
    for(int i=0;i<10;i++)
    for(int j=0;j<10;j++)
    {
        memset(visited,0,sizeof(visited));//每个点在遍历的时候一定要初始化visited数组
        dfs(i,j);
    }
    cout<<ans;


}


已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页