#include<iostream>
using namespace std;
#define MAX_VERTEX_NUM 20
typedef char VType;
typedef int AType;
typedef int InfoType;
typedef struct ArcNode
{
AType adjvex;
ArcNode *pNextArc;
InfoType *pInfo;
}ArcNode;
typedef struct VexNode
{
VType data;
ArcNode *pFirstArc;
}VexNode;
typedef struct
{
VexNode VLnode[MAX_VERTEX_NUM];
int Vnums;
int Anums;
}DGraph;
void CreateGraph(DGraph &G)
{
int i, j, k, weight;
ArcNode *p;
cin >> G.Vnums >> G.Anums;
for (i = 0; i < G.Vnums; ++i)
{
cin >> G.VLnode[i].data;
G.VLnode[i].pFirstArc = NULL;
}
printf("请顺序输入每条弧(边)的权值、弧尾和弧头(以空格作为间隔):\n");
for (k = 0; k < G.Anums; ++k)
{
cin >> i >> j >> weight;//i为弧尾,j为弧头
if (i != j)
{
p = new ArcNode;
p->adjvex = j;
p->pInfo = new InfoType;
*(p->pInfo) = weight;
p->pNextArc = G.VLnode[i].pFirstArc;//头插法
G.VLnode[i].pFirstArc = p;
}
}
}
void DestroyGraph(DGraph &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;
}
G.Anums = 0;
}
int LocateVex(DGraph G, VexNode v)
{
int i;
for (i = 0; i < G.Vnums; ++i)
if (G.VLnode[i].data == v.data)
return i;
return -1;
}
VType GetVex(DGraph G, int i)
{
if (i >= G.Vnums || i < 0)
exit(-1);
return G.VLnode[i].data;
}
bool PutVex(DGraph &G, int i, VType value)
{
i = LocateVex(G, G.VLnode[i]);
if (i > -1)
{
G.VLnode[i].data = value;
return true;
}
else
return false;
}
int FirstAdjVex(DGraph G, VexNode v)
{
int i;
ArcNode *p;
i = LocateVex(G, v);
p = G.VLnode[i].pFirstArc;
if (p)
return p->adjvex;
else
return -1;
}
int NextAdjVex(DGraph G, VexNode v, VexNode w)
{
int i, j;
ArcNode *p;
i = LocateVex(G, v);
j = LocateVex(G, w);
p = G.VLnode[i].pFirstArc;
while (p&&p->adjvex != j)
p = p->pNextArc;
if (!p || !(p->pNextArc))
return -1;
else
return p->pNextArc->adjvex;
}
void InsertVex(DGraph &G, VexNode v)
{//不考虑弧
G.VLnode[G.Vnums].data = v.data;
G.VLnode[G.Vnums].pFirstArc = NULL;
G.Vnums++;
}
bool DeleteVex(DGraph &
数据结构之有向网邻接表实现拓扑与关键活动(参考整理严蔚敏数据结构)
最新推荐文章于 2022-08-21 17:55:37 发布
本文介绍了如何使用邻接表数据结构创建有向图,并实现了拓扑排序、关键路径算法。通过邻接表,可以方便地插入、删除顶点和边,以及遍历图进行拓扑排序和寻找关键路径。代码中包含创建、销毁图,以及一系列操作顶点和边的方法。
摘要由CSDN通过智能技术生成