`
pleasetojava
  • 浏览: 730374 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

无向图的广度优先搜索(采用邻接表存储)C++实现

 
阅读更多

// 无向图的广度优先搜索(采用邻接表存储).cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include<iostream>
#define MAX 100
#define MAXQ 50
using namespace std;

struct edgeNode
{
int no; //边端的序号
char info; //边端的名称
struct edgeNode * next; //下一个
};

struct vexNode
{
char info; //节点名称
struct edgeNode *link; //与之相连的端点
};

//存储节点信息
vexNode adjlist[MAX];
//循环队列
int queue[MAXQ];
//访问标志
bool visited[MAX];

//建立邻接表存储
void createGraph(vexNode *adjlist)
{
int n,e;
cout<<"请输入节点数:";
cin>>n;
cout<<"请输入边数:";
cin>>e;
int i;
for(i=1;i<=n;i++)
{
cout<<"请输入节点"<<i<<"的名称:";
cin>>adjlist[i].info;
adjlist[i].link = NULL;
}
edgeNode *p1,*p2;
int v1,v2;
for(i=1;i<=e;i++)
{
cout<<"请输入边"<<i<<"的二端的节点序号:";
cin>>v1>>v2;
p1 = (edgeNode*)malloc(sizeof(edgeNode));
p2 = (edgeNode*)malloc(sizeof(edgeNode));
p1->no = v1;
p1->info = adjlist[v1].info;
p1->next = adjlist[v2].link;
adjlist[v2].link = p1;
p2->no = v2;
p2->info = adjlist[v2].info;
p2->next = adjlist[v1].link;
adjlist[v1].link = p2;
}
}

//广度优先搜索无向无权图
void BFS(vexNode *adjlist,int *queue,bool *visited)
{
int front,rear,v1;
cout<<"请输入从哪个序号的点开始搜索:";
cin>>v1;
front = 0;
rear = 1;
queue[rear] = v1;
int i;
//访问标志清空
for(i=1;i<MAX;i++)
visited[i] = false;
visited[v1] = true;
cout<<"广度优先搜索次序为:"<<endl;
cout<<"节点"<<v1<<",名称"<<adjlist[v1].info<<endl;
int vx;
edgeNode *p;
while(front != rear)
{
front = (front + 1)%MAXQ;
vx = queue[front];
p = adjlist[vx].link;
while(p!=NULL)
{
if(!visited[p->no])
{
visited[p->no] = true;
cout<<"节点"<<p->no<<",名称"<<adjlist[p->no].info<<endl;
rear = (rear + 1)%MAXQ;
queue[rear] = p->no;
}
p=p->next;
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
int cases;
cout<<"请输入案例的个数:";
cin>>cases;
while(cases--)
{
//创建邻接表
createGraph(adjlist);
//广度优先搜索
BFS(adjlist,queue,visited);
}
system("pause");
return 0;
}

---------------------------------------------程序测试--------------------------------------------------------

请输入案例的个数:1
请输入节点数:8
请输入边数:10
请输入节点1的名称:r
请输入节点2的名称:s
请输入节点3的名称:t
请输入节点4的名称:u
请输入节点5的名称:v
请输入节点6的名称:w
请输入节点7的名称:x
请输入节点8的名称:y
请输入边1的二端的节点序号:1 2
请输入边2的二端的节点序号:1 3
请输入边3的二端的节点序号:2 4
请输入边4的二端的节点序号:3 5
请输入边5的二端的节点序号:3 6
请输入边6的二端的节点序号:5 6
请输入边7的二端的节点序号:5 8
请输入边8的二端的节点序号:6 7
请输入边9的二端的节点序号:6 8
请输入边10的二端的节点序号:7 8
请输入从哪个序号的点开始搜索:2
广度优先搜索次序为:
节点2,名称s
节点4,名称u
节点1,名称r
节点3,名称t
节点6,名称w
节点5,名称v
节点8,名称y
节点7,名称x

请按任意键继续. . .

分享到:
评论

相关推荐

    C++无向图深度优先和广度优先遍历(编译可运行).rar

    以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列和相应生成树的边集。 注: 1.代码共182行。 2.代码经过多次编译运行,无错误。

    无向图的邻接矩阵存储及输出

    ### 无向图的邻接矩阵存储及输出详解 在计算机科学中,图是一种重要的数据结构,用于表示对象之间的关系。图由顶点(或节点)和边组成,其中边可以是有向的或无向的。本文将详细介绍无向图的邻接矩阵存储方式以及...

    图的遍历(包括深度 广度遍历 利用邻接矩阵 利用邻接表)

    而在邻接表表示的图中,DFS通常采用栈的数据结构来辅助实现。DFS的优势在于空间效率,对于稠密图(边数接近顶点数的平方)来说,邻接矩阵的存储效率较低,而邻接表则更节省空间。 接下来,我们讨论广度优先搜索(BFS...

    无向图建立、深度优先遍历和广度优先遍历实现算法[借鉴].pdf

    在本文中,我们使用C++语言来实现无向图的建立、深度优先遍历和广度优先遍历。我们的实现算法主要包括以下几个部分: 1. 无向图的建立 2. 深度优先遍历 3. 广度优先遍历 在建立无向图时,我们使用邻接矩阵来表示图...

    图的建立和遍历的c++实现(邻接表储存)

    本示例通过C++编程语言展示了如何实现图的建立和遍历,并且采用了邻接表的方式进行存储。这里我们将深入探讨这些概念。 首先,我们要理解什么是图。图是由顶点(也称为节点)和边组成的集合。边连接了两个顶点,...

    C++实现图的邻接表存储和广度优先遍历实例分析

    本文实例讲述了C++实现图的邻接表存储和广度优先遍历方法。分享给大家供大家参考。具体如下: 示例:建立如图所示的无向图 由上图知,该图有5个顶点,分别为a,b,c,d,e,有6条边. 示例输入(按照这个格式输入): 5 6...

    图的邻接矩阵和邻接表存储结构(C++)

    对于无向图,邻接矩阵是对称的,即对于任意两个顶点i和j,`matrix[i][j] == matrix[j][i]`。对于有向图,矩阵可能不对称,因为从顶点i到顶点j的边可能与反向边不同。 在C++中,我们可以创建一个二维动态数组来实现...

    图的邻接表实现.rar

    在实际应用中,使用邻接表实现的图可以有效地进行深度优先搜索(DFS)和广度优先搜索(BFS),并支持多种图算法,如最短路径计算(Dijkstra算法或Floyd-Warshall算法)、拓扑排序等。此外,由于类模板的使用,此实现...

    图的邻接表存储实现及深度优先遍历

    通过这个实验,学生可以深入理解图的邻接表存储和深度优先遍历的概念,并掌握C++实现这两种操作的技术。这对于学习图论和算法分析至关重要,因为这两种操作在解决许多实际问题时都非常有用,例如网络路由、文件系统...

    用邻接多重表实现图遍历演示

    邻接多重表是一种用于存储无向图的数据结构,它通过在每个顶点处维护一个指向与之相连的所有边的链表来表示图。这种数据结构不仅可以高效地存储图数据,而且可以方便地进行图的遍历操作,如深度优先搜索(DFS)和...

    数据结构-c语言-带main函数-图7.3-图的遍历-广度优先搜索-队列-邻接表-无向图。

    在本文中,我们将深入探讨如何使用C语言实现无向图的广度优先搜索(BFS)遍历,其中涉及到了数据结构如邻接表、队列,并使用了CFree软件进行辅助开发。首先,让我们详细了解这些概念。 **数据结构:邻接表** 邻接表...

    C++ 数据结构 邻接矩阵

    设计一个有向图和一个无向图,使用邻接矩阵和邻接表存储结构,完成在这两种存储结构下有向图和无向图的DFS(深度优先遍历)和BFS(广度优先遍历)的操作。 三、实验要求: 1. 根据实验内容编程,画出你所设计的图,...

    图的邻接矩阵和邻接表表示

    在实现过程中,需要考虑图的遍历(深度优先搜索DFS和广度优先搜索BFS)、添加边、删除边以及查找路径等操作。 **4. 功能与运行界面** 描述中提到的实现可能包含了完整的功能,如读取图的输入、输出结果、显示图形...

    数据结构实验报告-图-基于邻接表求连通无向图的DFS与BFS生成树-实验内容与要求.docx

    1. **图的存储结构**:实验要求使用邻接表来存储连通无向图。在邻接表中,每个顶点都有一个链表,链表中的节点代表与该顶点相连的其他顶点。这种结构适合处理稀疏图,即边的数量远小于顶点数量的平方。 2. **深度...

    邻接矩阵,邻接表实现图的创建,遍历(DFS,BFS)

    本文将深入探讨如何使用邻接矩阵和邻接表这两种方法来创建图,并实现深度优先搜索(DFS)和广度优先搜索(BFS)算法。 首先,我们来看邻接矩阵。邻接矩阵是一个二维数组,其中的元素代表图中节点之间的连接状态。...

    5.1_MGRAPH.CPP

    图的存储可采用邻接矩阵或邻接表; 打印出每一个顶点信息和邻接矩阵或邻接表 注意问题: 有向图,无向图,有向网,无向网任选一种。 2、深度优先遍历以及广度优先遍历 问题描述:从键盘输入数据建立图并打印深度...

    广州大学 数据结构实验报告 实验三 图的操作与实现

    邻接矩阵对于无向图是对称的,对于有向图则不一定。 2. **图的遍历算法**: - **深度优先搜索(DFS)**:从给定的起始顶点开始,沿着边尽可能深地探索图的分支,直到到达一个未被访问的顶点,然后回溯到上一个顶点,...

    图的邻接表操作源代码

    本篇将详细介绍邻接表的概念、如何用邻接表构建有向图和无向图,并涉及与之相关的操作,如计算顶点度、拓扑排序以及图的深度优先遍历(DFS)和广度优先遍历(BFS)。 1. **邻接表的定义**: 邻接表是图数据结构的...

    无向图深度遍历邻接矩阵报告.doc

    本报告旨在掌握图的结构特征、邻接矩阵和邻接表存储结构的特点和实现,以及在邻接矩阵或邻接表存储结构下图的深度优先和广度优先遍历算法思想及其程序实现。 一、图的结构特征 图是一种复杂的非线性数据结构,由...

    图的广度优先搜索

    在给定的代码中,我们看到了如何用C++实现一个简单的无向图和BFS的过程。首先,定义了一个循环队列`SqQueue`来存储待访问的节点,以及一个结构体`VexNode`来表示图的节点,其中包含顶点值`Vertex`和权值`Weight`,...

Global site tag (gtag.js) - Google Analytics