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

最新文章

  1. SVN使用_获取某版本后改动的文件列表
  2. cout格式化输出
  3. List Arraylist 数组的区别
  4. Python——函数的命名关键字参数
  5. JS的学习体会与分享
  6. 在Windows和UNIX下利用PHP和LDAP进行身份验证
  7. 【BZOJ】1038: [ZJOI2008]瞭望塔
  8. memcached +php环境配置和分析
  9. XML文件操作类--创建XML文件
  10. 搭建SpringMVC+MyBatis开发框架四
  11. 完美解决IE6中fixed抖动问题的方法
  12. Redmine backlogs 升级
  13. Java按钮设计
  14. 【LeetCode】462. Minimum Moves to Equal Array Elements II
  15. myeclipse 之 快捷键
  16. “strcmp()” Anyone?
  17. Caliburn.Micro - 框架搭建
  18. JVM学习记录-对象已死吗
  19. 第2次作业 -- 熟悉 JUnit 测试
  20. JavaScript中为什么使用立即执行函数来封装模块?

热门文章

  1. linux-根目录添加内存
  2. [数据结构 - 第8章] 查找之哈希表(C语言实现)
  3. 代码实现一个蛇形led走马灯
  4. HDU 5047 Sawtooth 找规律+拆分乘
  5. idea中maven项目打jar包
  6. 你知道Object中有哪些方法及其作用吗?
  7. Unity3d—GUI能量条
  8. 【模板整合计划】DP动态规划
  9. 【题解】L 国的战斗续之多路出击 [P2129]
  10. mysql启动时出现ERROR 2003问题的解决方法