广度优先搜索

我一直想写一篇广度优先搜索的文章来自己梳理一下,大概是我用广度用的少,我觉得对他不熟悉。

广度就是先看面前了 就是一群妹子站成N队 看完一队再看一队那是深搜 ,先看把这N队的第一个看完,再看第二个这样一次类推 就是广搜了。。。

一般广搜就是搜索最近的了  最短的了  这些东西  ;

废话不多说上菜:

广度优先搜索一般与图有关 就是给你一个图 例如:

A***#B

**###*

#*****

让你找一条A道B最短的路径 其中*能走  #不能走;

就是上来先输入图 一般存储在char[][]中;

char m[MAX_N][MAX_N];

图吗 找的就是坐标 所以我们这里用c++的 pair<int,int> 。

typedef pair<int,int> P;

还有要准备的就是两个数组,用来处理将来 当前位置 要向四个方向前进,

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

下面我们来写bfs函数:

在处理时我们用的是队列,c语言可以用数组来处理,不过处理起来不如队列省事;


void bfs()
{
	queue<int> que;
	//先找到初始位置坐标 si,sy;
	d[si][sy]=0;//d数组是用来存储当前位置到初始位置的最短距离
	//现将初始位置入队
	que.push(P(si,sy));
	while(!que.empty())
	{
		P p=que.front();
		que.pop();
		if(p.first==ei&&p.second==ej) break;//ei,ej是终点;
		for(int i=0;i<4;i++)
		{
			int nx=p.first+dx[i];
			int ny=p.second+dy[i];
			if(nx>=0&&nx<n&&ny>=0&&ny<n&&m[nx][ny]!='#'&&d[nx][ny]==INF)//判断是否越界 并且可行 并且没有走过 
			{
				que.push(P(nx,ny));
				d[nx][ny]=d[p.first][p.second]+1;
			}
		} 
	} 
}
这就是最简单的广度优先搜索的题目,这是我从算法书上看来的;

感谢自己,又写一篇,感谢看到错误 一起改正;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值