bfs广度优先搜索模板

本人蒟蒻,为响应号召 写下bfs模板一篇 可以适用于求最短步数,等最优解问题。如有不足或者不对的地方请各位大佬及时指出 - 欢迎来戳

具体实现代码(C++)

各个模块功能和简单明了

#include <iostream>
#include <queue>
#include <algorithm>
#define N 100
using namespace std;
int n, m;
int map[N][N];
bool vis[N][N];
//一般情况下的方向数组 具体的视情况列方向数组
int dir[4][2] = { {0,1},{0,-1},{1,0},{-1,0} }; //方向数组 struct node{
int x;
int y;
int step; //可以记录最小步数之类的最优解
node(int x, int y ,int step) :x(x), y(y),step(step) { }
node(){ }
};
//判断是否在图中
bool inmap(int x, int y)
{
if (x >= 1 && x <= n && y >= 1 && y <= m)return true;
else return false;
} void bfs(int sx, int sy)
{
vis[sx][sy] = 1; //标注起始点
queue<node> q;
q.push(node(sx, sy ,0));
while (!q.empty())
{
node now = q.front();
for (int i = 0; i < 4; i++)
{
int x = now.x + dir[i][0];
int y = now.y + dir[i][1];
int step = now.step + 1; //一次只走一步
if (inmap(x, y) == true && vis[x][y] == false)
{
//此处还可以进行别的剪枝
//可以是多个条件剪枝或者终止条件由具体题目而定
if (到达终点或者是其他剪枝操作)
{
//进行最后处理其他剪枝操作....
return;
}
else {
vis[x][y] = 1; //标记该点已经来过并将其放入队列
q.push(node(x, y,step + 1));
}
}
else return;
}
q.pop();
}
return;
}
void init()
{
int sx, sy;
cin >> n >> m >> sx >> sy;
bfs(sx, sy);
}
int main()
{
init();
system("pause");
return 0;
}

搜索 - 广度优先搜索(BFS)普通模板的更多相关文章

  1. 深度优先搜索 & 广度优先搜索

    目录 邻接表 邻接表的深度优先搜索 邻接表的广度优先搜索 临接数组 临接数组的深度优先搜索 临接数组的广度优先搜索 二叉树 二叉树的深度优先搜索 二叉树的广度优先搜索 邻接表 邻接表的深度优先搜索 假 ...

  2. js图的数据结构处理----邻链表,广度优先搜索,最小路径,深度优先搜索,探索时间拓扑

    //邻居连表 //先加入各顶点,然后加入边 //队列 var Queue = (function(){ var item = new WeakMap(); class Queue{ construct ...

  3. python实现广度优先搜索和深度优先搜索

    图的概念 图表示的是多点之间的连接关系,由节点和边组成.类型分为有向图,无向图,加权图等,任何问题只要能抽象为图,那么就可以应用相应的图算法. 用字典来表示图 这里我们以有向图举例,有向图的邻居节点是 ...

  4. 用一道模板题理解多源广度优先搜索(bfs)

    题目: //多元广度优先搜索(bfs)模板题详细注释题解(c++)class Solution { int cnt; //新鲜橘子个数 int dis[10][10]; //距离 int dir_x[ ...

  5. 关于宽搜BFS广度优先搜索的那点事

    以前一直知道深搜是一个递归栈,广搜是队列,FIFO先进先出LILO后进后出啥的.DFS是以深度作为第一关键词,即当碰到岔道口时总是先选择其中的一条岔路前进,而不管其他岔路,直到碰到死胡同时才返回岔道口 ...

  6. 广度优先搜索(BFS)解题总结

    定义 广度优先搜索算法(Breadth-First-Search),是一种图形搜索算法. 简单的说,BFS是从根节点开始,沿着树(图)的宽度遍历树(图)的节点. 如果所有节点均被访问,则算法中止. B ...

  7. 0算法基础学算法 搜索篇第二讲 BFS广度优先搜索的思想

    dfs前置知识: 递归链接:0基础算法基础学算法 第六弹 递归 - 球君 - 博客园 (cnblogs.com) dfs深度优先搜索:0基础学算法 搜索篇第一讲 深度优先搜索 - 球君 - 博客园 ( ...

  8. 图的遍历BFS广度优先搜索

    图的遍历BFS广度优先搜索 1. 简介 BFS(Breadth First Search,广度优先搜索,又名宽度优先搜索),与深度优先算法在一个结点"死磕到底"的思维不同,广度优先 ...

  9. 广度优先搜索 BFS 学习笔记

    广度优先搜索 BFS 学习笔记 引入 广搜是图论中的基础算法之一,属于一种盲目搜寻方法. 广搜需要使用队列来实现,分以下几步: 将起点插入队尾: 取队首 \(u\),如果 $u\to v $ 有一条路 ...

随机推荐

  1. Linux性能优化实战学习笔记:第十讲

    一.坏境准备 1.拓扑图 2.安装包 在第9节的基础上 在VM2上安装hping3依奈包 wget http://www.tcpdump.org/release/libpcap-1.9.0.tar.g ...

  2. [LeetCode] 34. Find First and Last Position of Element in Sorted Array 在有序数组中查找元素的第一个和最后一个位置

    Given an array of integers nums sorted in ascending order, find the starting and ending position of ...

  3. 【微信小程序】手写索引选择器(城市列表,汽车品牌选择列表)

    摘要: 小程序索引选择器,点击跳转相应条目,索引可滑动,滑动也可跳转 场景:城市选择列表, 汽车品牌选择列表 所用组件: scroll-view(小程序原生) https://developers.w ...

  4. 【转】python中numpy模块下的np.clip()的用法

    转自:https://blog.csdn.net/HHTNAN/article/details/79799612 Numpy 中clip函数的使用 一维数组 其中a是一个数组,后面两个参数分别表示最小 ...

  5. cloudstack4.11 centos7 安装文档

    centos 7.x  cloudstack 4.11 提示:生产环境 建议用ceph 块存储为主存储, 这里测试使用的是nfs主存储     组件 172.16.19.116  cloudstack ...

  6. SpringBoot+EventBus使用教程(二)

    简介 继续上篇,本篇文章介绍如何集成spring-boot-starter-guava-eventbus使用EventBus,最新的版本好像已经不叫spring-boot-starter-guava- ...

  7. Intellij IDEA的安装教程

    一.下载安装 1.打开官网:http://www.jetbrains.com/idea/,点击页面中的“DOWNLOAD” 2.根据自己的需要选择下载的IntelliJ IDEA版本,此处我的电脑是W ...

  8. Java for循环每次都通过list.size()和 string.length()获取大小是否消耗性能?

    前言 有人说在for循环之前用一个局部变量先获取到list.size().str.length(),然后在for循环的判断条件里通过这个局部变量替换list.size().str.length()会节 ...

  9. 乘法器——booth编码

    博主最近在学习加法器.乘法器.IEEE的浮点数标准,作为数字IC的基础.当看到booth编码的乘法器时,对booth编码不是很理解,然后在网上找各种理解,终于豁然开朗.现将一个很好的解释分享给大家,希 ...

  10. golang---常用函数

    package main; import ( "os" "fmt" "time" "strings" ) //os包中的 ...