LQ0085 迷宫枚举+模拟

Posted 海岛Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0085 迷宫枚举+模拟相关的知识,希望对你有一定的参考价值。

题目来源:蓝桥杯2017初赛 C++ A组A题

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

UDDLUULRUL
UURLLLRRRU
RRUURLDLRD
RUDDDDUUUU
URUDLLRRUU
DURLRLDLRL
ULLURLLRDU
RDLULLRDDD
UUDDUDUDLL
ULRDLUURRR

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

输出格式
输出一个整数表示答案

数据范围与提示
为方便理解,可参考此图

问题分析
对于迷宫的每个点,按照题意要求都走一下即可。这是暴力模拟的方法。
可以用DFS来实现。
程序运行结果是31。

AC的C语言程序(模拟)如下:

/* LQ0085 迷宫 */

#include <stdio.h>

char g[][11] = 
    "UDDLUULRUL",
    "UURLLLRRRU",
    "RRUURLDLRD",
    "RUDDDDUUUU",
    "URUDLLRRUU",
    "DURLRLDLRL",
    "ULLURLLRDU",
    "RDLULLRDDD",
    "UUDDUDUDLL",
    "ULRDLUURRR"
;

int main()

    int cnt = 0;
    for (int i = 0; i < 10; i++)
        for (int j = 0; j < 10; j++) 
            int x = i, y = j;
            char cur = g[i][j], last = cur;
            for ( ; ; ) 
                if (cur == 'U') 
                    if (last == 'D') break;
                    x--;
                 else if (cur == 'R') 
                    if (last == 'L') break;
                    y++;
                 else if (cur == 'L') 
                    if (last == 'R') break;
                    y--;
                 else if (cur == 'D') 
                    if (last == 'U') break;
                    x++;
                
                if (x < 0 || x > 9 || y < 0 || y > 9) 
                    cnt++;
                    break;
                
                last = cur;
                cur = g[x][y];
            
        

    printf("%d\\n", cnt);

    return 0;

以上是关于LQ0085 迷宫枚举+模拟的主要内容,如果未能解决你的问题,请参考以下文章

迷宫(2017省赛填空)

CSP模拟赛Freda的迷宫(桥)

LQ0139 油漆面积枚举

LQ0118 第几个幸运数枚举+迭代

dfs

LQ0049 有奖猜谜模拟