数据结构——图的广度优先遍历(头歌)

图的广度优先遍历

  • 任务要求
  • 评论
  • 关卡排行榜
  • 本题代码

任务描述

本关任务:对邻接表存储的无向图进行广度优先遍历。

相关知识

1.无向图的邻接表 2.图的广度优先遍历

编程要求

根据提示,在右侧编辑器补充代码,利用队列的基本算法(如初始化空队列、入队列、出队列、判队空等),实现对邻接表存储的无向图进行广度优先遍历。

输入说明

第1行:输入顶点数n和边数m 第2行:输入n个顶点的名称(字符) 接下来m行,分别输入每条无向边(u,v)

输出说明

1.图的邻接表(每个顶点邻接到的顶点) 2.图的广度优先遍历序列(按顶点编号从小到大选择起点进行遍历,若图连通,则输出一行;若图不连通,则分行输出各连通分支的遍历序列。注意:每个字符前有一个空格)

样例输入

5 4

A B C D E

A C

A B

B C

D E

样例输出

A邻接到: B C

B邻接到: C A

C邻接到: B A

D邻接到: E

E邻接到: D

图的广度优先序列:

A B C

D E

本题代码部分

#include <cstdio>
#include <iostream>
using namespace std;
#define  OK 1
#define  ERROR 0 
#define  OVERFLOW -1
typedef int Status;

#include "queue.h"              //循环队列的定义以及基本算法(初始化、入队、出队、判队空)
#include "graph.h"				//图的邻接表定义、无向图邻接表的建立和输出 
bool visited[MVNum];			//定义访问标记数组 
void BFS(ALGraph G,int v)
{	//从顶点v出发,对图进行广度优先遍历
	SqQueue Q;					//定义队列Q
    InitQueue(Q);				//将队列Q初始化为空队列
 	/******************begin*****************/
	EnQueue(Q, v);           //顶点v入队
    visited[v] = true;      //标记顶点v为已访问
    while (!QueueEmpty(Q)) 
    {
        DeQueue(Q, v);     //队头元素出队,存储在v中
        cout <<" "<<G.vertices[v].data; //输出或其他操作
        for (ArcNode* p = G.vertices[v].firstarc; p != NULL; p = p->nextarc) 
        {
            int w = p->adjvex; //邻接顶点的下标
            if (!visited[w]) 
            {
                EnQueue(Q, w); //邻接顶点入队
                visited[w] = true; //标记邻接顶点为已访问
            }
        }
    }
 	/******************end******************/
}//BFS

void BFSTraverse(ALGraph G){
   int v;
   for (v=0;v<G.vexnum;v++) 	//初始化每个顶点的访问标记为false
   		visited[v]=false;  
   for (v=0;v<G.vexnum;v++)
   {      
        if (!visited[v]) 		
		{ 
		   	cout<<endl;
        	BFS(G,v);			//对未访问的顶点v,调用BFS,进行广度优先搜索
		}
   }
	   
}//BFSTraverse

int main()
{	ALGraph G;	
  	CreateUDG(G);				//建立无向图的邻接表
	PrintGraph(G);				//输出图的邻接表
	cout<<"\n 图的广度优先序列:";	 
    BFSTraverse(G);				//广度优先遍历	
	return 0;   	
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据结构中,邻接矩阵是一种的存储方式,广度优先遍历是一种遍历算法。邻接矩阵通过一个二维数组来表示的连接情况,其中数组的行和列分别表示的顶点,数组元素的值表示两个顶点之间是否有边相连。广度优先遍历则是从的某个起始顶点开始,逐层遍历中的顶点,先访问起始顶点的所有邻接顶点,然后再依次访问这些邻接顶点的邻接顶点,直到遍历中所有的顶点。这样可以保证从起始顶点到其他顶点的路径是最短的,也可以获取到起始顶点到其他顶点的层次关系。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [头歌数据结构的邻接矩阵存储及遍历操作](https://download.csdn.net/download/weixin_51512722/85465759)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [数据结构:邻接矩阵和邻接表、深度优先遍历广度优先遍历](https://blog.csdn.net/lk142500/article/details/106892149)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值