【回忆迷宫——处理方法+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';
    }
}
相关推荐
Haohao+++21 小时前
Stable Diffusion原理解析
人工智能·深度学习·算法
ideaout技术团队1 天前
leetcode学习笔记2:多数元素(摩尔投票算法)
学习·算法·leetcode
代码充电宝1 天前
LeetCode 算法题【简单】283. 移动零
java·算法·leetcode·职场和发展
不枯石1 天前
Matlab通过GUI实现点云的均值滤波(附最简版)
开发语言·图像处理·算法·计算机视觉·matlab·均值算法
不枯石1 天前
Matlab通过GUI实现点云的双边(Bilateral)滤波(附最简版)
开发语言·图像处理·算法·计算机视觉·matlab
白水先森1 天前
C语言作用域与数组详解
java·数据结构·算法
想唱rap1 天前
直接选择排序、堆排序、冒泡排序
c语言·数据结构·笔记·算法·新浪微博
老葱头蒸鸡1 天前
(27)APS.NET Core8.0 堆栈原理通俗理解
算法
视睿1 天前
【C++练习】06.输出100以内的所有素数
开发语言·c++·算法·机器人·无人机
柠檬07111 天前
matlab cell 数据转换及记录
算法