• 深搜——蓝桥杯之迷宫


    问题描述:


    标题:迷宫

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


    房间的地板上写着一个很大的字母。
    我们假设玩家是面朝上坡的方向站立,则:
    L表示走到左边的房间,
    R表示走到右边的房间,
    U表示走到上坡方向的房间,
    D表示走到下坡方向的房间。


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


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


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


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


    请提交该整数,表示走出迷宫的玩家数目,不要填写任何多余的内容。

    思路:

    本来想的是类似求解迷宫问题的深搜,发现它无法遍历每个点,还不如两层循环来得快,判断每个点,然后用深搜,每走一步标记数组对应值改变为 1,超出边界符合题意,移动到标记数组值为 1 则表示兜圈子,直到所有点判断结束。 

    #include <iostream>
    
    using namespace std;
    
    int mg[10][10] =
    {
        {1,2,2,3,1,1,3,4,1,3},
        {1,1,4,3,3,3,4,4,4,1},
        {4,4,1,1,4,3,2,3,4,2},
        {4,1,2,2,2,2,1,1,1,1},
        {1,4,1,2,3,3,4,4,1,1},
        {2,1,4,3,4,3,2,3,4,3},
        {1,3,3,1,4,3,3,4,2,1},
        {4,2,3,1,3,3,4,2,2,2},
        {1,1,2,2,1,2,1,2,3,3},
        {1,3,4,2,3,1,1,4,4,4}
    };
    
    int index[10][10];
    
    int count = 0;
    
    void Reset()
    {
        for(int i = 0; i<10; i++)
            for(int j = 0; j<10; j++)
                index[i][j] = 0;
    }
    
    
    int dfs(int s1,int s2)
    {
        Reset();
        while(1)
        {
            if(s1<0 || s1 >9 || s2<0 || s2>9)
                return 1;
            if(index[s1][s2] == 1)
                return 0;
            index[s1][s2] = 1;
            switch(mg[s1][s2])
            {
            case 1:
                s1--;
                break;
            case 2:
                s1++;
                break;
            case 3:
                s2--;
                break;
            case 4:
                s2++;
                break;
            }
        }
    }
    
    void Find()
    {
        for(int i = 0; i<10; i++)
            for(int j = 0; j<10; j++)
                count += dfs(i,j);
    }
    
    int main()
    {
        Find();
        cout<<count;
        return 0;
    }
     
  • 相关阅读:
    线性方程组迭代法
    统计学习方法——朴素贝叶斯法、先验概率、后验概率
    信息熵、相对熵(KL散度)、交叉熵、条件熵
    六级听力词组积累
    样本均值和样本方差的无偏性证明、样本方差的方差
    Python 矩阵相关
    Python 绘图
    win10、VSCode、python3数据科学库
    Python杂记
    Gradient descend 梯度下降法和归一化、python中的实现(未完善)
  • 原文地址:https://www.cnblogs.com/NikkiNikita/p/9450762.html
Copyright © 2020-2023  润新知