首页 > 其他分享 >BFS

BFS

时间:2023-03-21 14:22:16浏览次数:27  
标签:yy int BFS xx 105 dis

BFS

算法思想:

通过队(STL容器queue)/栈(STL容器stack)的使用,实现对全地图的检索
不同与dfs的单向检索,bfs是将所有路径同时进行检索

浅谈队(queue) --> 先进后出

浅谈栈(stack) --> 后进先出

算法实现:

在BFS中不再使用递归来实现遍历,而是通过判断将所的路径导入队/栈中,通过队/栈的使用去实现全图的遍历
将推入队/栈的数据进行标记,防止重复遍历
要求,对队/栈的使用要有基本的了解

例题:

/*
*迷宫问题

  • 一人处于(1,1)点上,‘1’是墙壁‘0’是路
  • 只能上下左右移动
  • 问从(1,1)到右下角的出口至少要移动多少次

样例输入
5 5
0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
*/

ACODE

#include <bits/stdc++.h>

#define ll long long
#define endl '\n'
using namespace std;

int dx[4] = {1,-1,0,0};
int dy[4] = {0,0,1,-1};
int TY[105][105],vis[105][105],dis[105][105];
#define PII pair<int , int>
int n,m;
int bfs(){
    queue<PII> q;
    q.push({1,1});  //将起点推入队列里
    vis[1][1] = true;       //将起点标记成已经走过
    dis[1][1] = 0;          //走了几步

    while (q.size()){
        auto ty = q.front();
        q.pop();
        int x = ty.first, y = ty.second;
        for (int i = 0; i < 4; i++) {
            int xx = x + dx[i],yy = y + dy[i];
            if(xx < 1 || xx > n || yy < 1 || yy > m)continue;
            if(TY[xx][yy])continue;
            if(vis[xx][yy])continue;

            q.push({xx,yy});
            vis[xx][yy] = true;             //将可以走的点标记
            dis[xx][yy] = dis[x][y] + 1;    //记录
        }
    }
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cout << dis[i][j] << " ";
        }
        cout << endl;
    }
    return dis[n][m];
}
int main() {
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> TY[i][j];
        }
    }
    cout << endl;
    cout << bfs();
    return 0;
}

标签:yy,int,BFS,xx,105,dis
From: https://www.cnblogs.com/TFOREVERY/p/17239873.html

相关文章

  • 迷宫问题之bfs
    先来一道简单的迷宫模板题迷宫由n行m列的单元格组成,每个单元格要么是空地,要么是障碍物。其中1表示空地,可以走通,2表示障碍物。输出从左上角到右下角的最短路径长度。......
  • bfs走迷宫
      #include<iostream>#include<cstring>#include<queue>constintN=110;intn,m;typedefpair<int,int>PII;intg[N][N];//存图intd[N][N];//记录距离PIIq......
  • n-皇后问题(bfs)
        #include<iostream>usingnamespacestd;constintN=20;//N*N两倍intn;boolcol[N],dg[N],udg[N];//同一列,对角线,反对角线(标记一下是否可以走)charg[......
  • # 909 -「java」一维数组展开+ BFS解决 -蛇梯棋- 最短步进次数 的详细思路
    Tags:中等数组BFSjava 题目链接:909.蛇梯棋 注意事项[题目中的坑]:【"S形"的概念】:题目开头举例的N*N的数组,其内标示的1~N²数字,指代的是......
  • 2020 年百度之星·程序设计大赛 - 初赛一 Civilization BFS广搜
    problemCivilizationAccepts:619Submissions:2182TimeLimit:6000/3000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)ProblemDescription这是一个......
  • bfs: 通过利用其它点到出发点的距离 来表示bfs的层数
    题目:微博被称为中文版的Twitter。微博上的用户既可能有很多关注者,也可能关注很多其他用户。因此,形成了一种基于这些关注关系的社交网络。当用户在微博上发布帖子时,他/......
  • DFS和BFS理解+模板+例题
    DFS和BFS理解+模板+例题DFS(深度优先搜索)本质上是暴力把所有的路径都搜索出来,它运用了回溯,保存这次的位置并深入搜索,都搜索完便回溯回来,搜下一个位置,直到把所有最深位置都......
  • DFS和BFS理解+模板+例题
    DFS和BFS理解+模板+例题DFS(深度优先搜索)本质上是暴力把所有的路径都搜索出来,它运用了回溯,保存这次的位置并深入搜索,都搜索完便回溯回来,搜下一个位置,直到把所有最深位置都......
  • bfs详解
    bfs详解1,bfs的基本概念bfs是广度优先搜索,是一种对树形结构的遍历,他的思想是先选定一个点,从这个点出发,每次只走一步,分为四个方向,直到找到正确答案,相较于dfs的直接递归,bfs......
  • 考研算法辅导课笔记:第十四章--模拟,递推,bfs
    这节课完全是上机题,机试内容。想要保持排名靠前吗?那就多在上面投入时间,一般来说投入时间与排名成正比模拟题先讲一下做过的题目类型。比如说dfs,dp,贪心,从一堆方案中涨到......