BFS(无权来写最短路径)

bfs经常被人们用于来写无权的最短路径问题,他是图中的一个算法。广度优先搜索.

广度优先算法和咱们的层次遍历一个样子哈,借助一个队列来写。

创建一个visited数组,用来记录已被访问过的顶点;创建一个队列,用来存放每一层的顶点;初始化图G

从visited【0】开始访问,然后把每一个所访问后的值设置为true 然后入队

如果队列是空的

(1)队头顶点u出队。

(2)依次检查u的所有邻接顶点w,若visited[w]的值为false,则访问w,并将visited[w]置为true,同时将w入队。

因为我们之前把没有访问过的原设置为false,之前有过判断么这样的话这样的话就可以访问并让所有的元素入队了,而且不会重复入队.0

/*一些量的定义*/
queue<char> q;				//定义一个队列,使用库函数queue
#define MVNum 100			//表示最大顶点个数
bool visited[MVNum];		        //定义一个visited数组,记录已被访问的顶点

然后我们创建一个邻接矩阵(二维数组就可以了,创建完给他每一个元素初始化就行。/*采用邻接矩阵表示图的广度优先遍历*/
void BFS_AM(AMGraph &G,char v0)
{
/*从v0元素开始访问图*/
 
    int u,i,v,w;
    v = LocateVex(G,v0);                            //找到v0对应的下标
    printf("%c ", v0);                              //打印v0
    visited[v] = 1;                                //顶点v0已被访问
    q.push(v0);                            //将v0入队
 
    while (!q.empty())
    {
        u = q.front();                //将队头元素u出队,开始访问u的所有邻接点
        v = LocateVex(G, u);            //得到顶点u的对应下标
        q.pop();                //将顶点u出队
        for (i = 0; i < G.vexnum; i++)
        {
            w = G.vexs[i];
            if (G.arcs[v][i] && !visited[i])//顶点u和w间有边,且顶点w未被访问
            {
                printf("%c ", w);    //打印顶点w
                q.push(w);        //将顶点w入队
                visited[i] = 1;        //顶点w已被访问
            }
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘子买5斤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值