【回忆迷宫——处理方法+DFS】

题目

代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
const int N = 250;
int g[N][N];
bool vis[N][N];
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
int nx = 999, ny = 999, mx, my;
int x = 101, y = 101; //0墙 (1空地 2远方)
bool jud(int x, int y)
{
    if(vis[x][y]) return false;
    if(x < nx || x > mx || y < ny || y > my) return false;
    for(int i = 0; i < 4; i++)
    {
        int nx = x + dx[i];
        int ny = y + dy[i];
        if(g[nx][ny] == 1) return false;
    }
    
    return true;
}
void dfs(int x, int y)
{
    vis[x][y] = 1;
    g[x][y] = 2;
    for(int i = 0; i < 4; i++)
    {
        int nx = x + dx[i];
        int ny = y + dy[i];
        if(jud(nx, ny)) dfs(nx, ny);
    }
}
int main()
{
    int n;
    cin >> n;
    nx = min(nx, x); ny = min(ny, y);
    mx = max(mx, x); my = max(my, y);
    g[x][y] = 1; //这一句本来应该不用,感觉数据有问题
    for(int i = 1; i <= n; i++)
    {
        char c;
        cin >> c;
        
        if(c == 'U') x--;
        else if(c == 'L') y--; 
        else if(c == 'D') x++;
        else if(c == 'R') y++;
        
        g[x][y] = 1;
        nx = min(nx, x); ny = min(ny, y);
        mx = max(mx, x); my = max(my, y);
    }
    
    nx--, ny--, mx++, my++;
    
    for(int i = nx; i <= mx; i++)
    {
        if(jud(i, ny)) dfs(i, ny);
        if(jud(i, my)) dfs(i, my);
    }
    for(int i = ny; i <= my; i++)
    {
        if(jud(nx, i)) dfs(nx, i);
        if(jud(mx, i)) dfs(mx, i);
    }
    
    for(int i = nx; i <= mx; i++)
    {
        for(int j = ny; j <= my; j++)
        {
            if(g[i][j] == 0) cout << '*';
            else cout << ' ';
        }
        cout << '\n';
    }
}
相关推荐
superman超哥1 小时前
仓颉语言中基本数据类型的深度剖析与工程实践
c语言·开发语言·python·算法·仓颉
Learner__Q1 小时前
每天五分钟:滑动窗口-LeetCode高频题解析_day3
python·算法·leetcode
阿昭L2 小时前
leetcode链表相交
算法·leetcode·链表
闻缺陷则喜何志丹2 小时前
【计算几何】仿射变换与齐次矩阵
c++·数学·算法·矩阵·计算几何
liuyao_xianhui2 小时前
0~n-1中缺失的数字_优选算法(二分查找)
算法
hmbbcsm2 小时前
python做题小记(八)
开发语言·c++·算法
机器学习之心3 小时前
基于Stacking集成学习算法的数据回归预测(4种基学习器PLS、SVM、BP、RF,元学习器LSBoost)MATLAB代码
算法·回归·集成学习·stacking集成学习
图像生成小菜鸟3 小时前
Score Based diffusion model 数学推导
算法·机器学习·概率论
声声codeGrandMaster3 小时前
AI之模型提升
人工智能·pytorch·python·算法·ai
黄金小码农3 小时前
工具坐标系
算法