当前位置: 首页 > article >正文

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

题目

代码

#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';
    }
}


http://www.kler.cn/a/514197.html

相关文章:

  • 安装wxFormBuilder
  • FPGA 开发工作需求明确:关键要点与实践方法
  • RK3568笔记七十七:RTMP实时推流
  • 机器学习(5):支持向量机
  • 9. 神经网络(一.神经元模型)
  • HTML语言的多线程编程
  • python高级加密算法AES对信息进行加密和解密
  • P14软件测试-功能测试
  • 深度学习-89-大语言模型LLM之AI应用开发的基本概念
  • 【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南
  • 分布式ID介绍实现方案
  • 什么是贝叶斯推理智能体?为什么强于大模型?
  • 《C++ primer plus》第六版课后编程题-第02章
  • 华为E9000刀箱服务器监控指标解读
  • PyTorch使用教程(4)-如何使用torch.nn构建模型?
  • 四、华为交换机 STP
  • Java 权限修饰符
  • AI赋能Flutter开发:ScriptEcho助你高效构建跨端应用
  • 算法随笔_15: 找到K个最接近的元素
  • Vue 3中导航守卫(Navigation Guard)结合Axios实现token认证机制
  • 62,【2】 BUUCTF WEB [强网杯 2019]Upload1
  • 422. 有效的单词方块
  • 在stm32中C语言编写的程序中,一个整形数据是怎么存储的,高位在前还是低位在前
  • Qt按钮美化教程
  • 高频交易中 FPGA 的作用及面试指南
  • 小红书用户作品列表 API 系列,返回值说明