//无向图的邻接表存储实现图的基本操作
#include<iostream>
using namespace std;
#define MAXVEX 100
typedef char VexType;
typedef struct ArcNode
{
int adjvex;
ArcNode *pNextArc;
}ArcNode;
typedef struct VexNode
{
VexType data;
ArcNode *pFirstArc;
}VexNode;
typedef struct
{
VexNode VLnode[MAXVEX];
int Vnums;
int Anums;
}ALGraph;
int LocateVex(ALGraph G,VexNode v)
{
int i;
for (i = 0; i < G.Vnums; ++i)
{
if (G.VLnode[i].data == v.data)
return i;
}
return -1;
}
void CreateGraph(ALGraph &G)
{
int i, j, k;
ArcNode *pA;
cin >> G.Vnums >> G.Anums;
for (i = 0; i < G.Vnums; ++i)
{
cin >> G.VLnode[i].data;
G.VLnode[i].pFirstArc = NULL;
}
for (k = 0; k < G.Anums; ++k)
{
cin >> i >> j;//i!=j
pA = new ArcNode;
pA->adjvex = i;
pA->pNextArc = G.VLnode[j].pFirstArc;
G.VLnode[j].pFirstArc = pA;
pA = new ArcNode;
pA->adjvex = j;
pA->pNextArc = G.VLnode[i].pFirstArc;
G.VLnode[i].pFirstArc = pA;
}
}
void DestroyGraph(ALGraph &G)
{
int i;
ArcNode *p, *q;
for (i = 0; i < G.Vnums; ++i)
{
p = G.VLnode[i].pFirstArc;
while (p)
{
q = p->pNextArc;
delete p;
p = q;
}
G.VLnode[i].pFirstArc = NULL;
}
}
VexNode GetVex(ALGraph G, int i)
{
if (i<0 || i>G.Vnums)
exit(-1);
return G.VLnode[i];
}
bool PutVex(ALGraph &
数据结构之无向图基本操作(采用邻接矩阵存储)—整理严蔚敏数据结构
最新推荐文章于 2024-08-25 23:36:58 发布
本文介绍了如何使用邻接矩阵存储无向图,并提供了创建、销毁、获取顶点、插入顶点、删除顶点、查找边、插入边、删除边等基本操作的C++代码实现。此外,还涵盖了深度优先搜索(DFS)和广度优先搜索(BFS)的遍历算法。

最低0.47元/天 解锁文章
8537

被折叠的 条评论
为什么被折叠?



