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

bfs--acwing

题目一:走迷宫

844. 走迷宫 - AcWing题库

 

分析

bfs 求最小步数

地图用二维存储,标记因为地图是01,一起使用。

步数与移动状态(坐标)的关系,可以用映射map,或者二维数组,或者结构体。

也可以用变量存步数(这个我弄的容易出bug)

代码(map)

#include<bits/stdc++.h>
using namespace std;

const int N = 110;
using PII = pair<int,int>;
int n, m;
int arr[N][N];

map<PII,int> ans; // 或者使用二维数组来映射步数

int dx[4] = {-1,0,1,0}, dy[4] = {0,-1,0,1};

void bfs() {
    queue<PII> q;
    q.push({0,0});
    ans[{0,0}] = 0;
    arr[0][0] = 1;
    
    while(q.size()) {
        auto t = q.front(); q.pop();
        int x = t.first,  y = t.second;
        
        for(int i = 0; i < 4; i ++) {
            int a = x+dx[i], b = y+dy[i];
            if(!arr[a][b] && a>=0 && b>=0 && a<n && b<m) {
                arr[a][b] = 1;
                q.push({a,b}); ans[{a,b}] = ans[{x,y}]+1;
            }
        }
        
    }
}

int main() {
    cin >> n >> m;
    for(int i = 0; i < n; i ++) 
        for(int j = 0; j < m; j ++)
            cin >> arr[i][j];
    
    bfs();
    
    cout << ans[{n-1,m-1}] << endl;
    
    return 0;
}

代码(变量存储步数)

#include<bits/stdc++.h>
using namespace std;

using PII = pair<int,int>;
const int N = 110;
int arr[N][N];
int ans;
int n, m;

int dx[4] = {-1,0,1,0}, dy[4] = {0,-1,0,1};

void bfs() {
    queue<PII> q;
    q.push({0,0});
    arr[0][0] = 1;
    
    int ed = 1, cnt = 1,idx = 0; ans = 0;
    while(q.size()) {
        auto t = q.front(); q.pop();
        int x = t.first, y = t.second;
        idx ++;
        for(int i = 0; i < 4; i ++) {
            int a = x+dx[i], b = y+dy[i];
            if(!arr[a][b] && a>=0 && b>=0 && a<n && b<m) {
                cnt ++;
                q.push({a,b}); 
                arr[a][b] = 1; 
                
            }
        }
        
        if(x==n-1 && y==m-1) return ;
        if(idx==ed) {
            ed = cnt; ans ++;
        }
        
    }
    
}

int main() {
    cin >> n >> m;
    for(int i = 0; i < n; i ++) 
        for(int j = 0; j < m; j ++) 
            cin >> arr[i][j];
    
    bfs();
    
    cout << ans << endl;
    
    return 0;
}


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

相关文章:

  • 攻防世界-fileclude-文件包含
  • uniapp使用扩展组件uni-data-select出现的问题汇总
  • 【CSS in Depth 2 精译_066】11.2 颜色的定义(上)
  • 实验13 使用预训练resnet18实现CIFAR-10分类
  • 【模电】常见电路参数计算
  • Android Camera2采集并编码为H.264
  • 利用HTML5获取店铺商品详情:打造现代化电商平台的新篇章
  • 系统规划与管理师历年综合知识真题重点知识点
  • Oracle DB的并发控制
  • Win10+Ubuntu20.04双系统重装Ubuntu22.04单系统
  • LeetCode - #150 逆波兰表达式求值
  • Linux 中Shell快捷键
  • 跨UI发送信号
  • 基于Matlab卡尔曼滤波的GPS/INS集成导航系统研究与实现
  • Kafka如何保证消息可靠?
  • 【Golang】WaitGroup 实现原理
  • 解决el-select数据量过大的3种方法
  • nerdctl:与 Docker 兼容的 containerd CLI
  • ArcMap 多图层叠加表达变化等功能操作
  • 21天掌握javaweb--->第3天:MyBatis基础与Spring Boot集成
  • MATLAB基础应用精讲-【人工智能】数据生命周期‌(概念篇)
  • 【jvm】C1编译器
  • NLP-语料库的相关知识整理
  • vue 项目准备
  • Figma入门-组件变体复习
  • Kafka 数据写入问题