#include<iostream>
using namespace std;
#define MAXVEX 100
typedef char VType;
typedef int AType;
typedef struct ArcNode
{
AType adjvex;
ArcNode *pNextArc;
}ArcNode;
typedef struct VexNode
{
VType data;
ArcNode *pFirstArc;
}VexNode;
typedef struct
{
VexNode VLnode[MAXVEX];
int Vnums;
int Anums;
}DGraph;
void CreateGraph(DGraph &G)
{
int i, j, k;
ArcNode *p;
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;
if (i != j)
{
p = new ArcNode;
p->adjvex = j;
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 *pA;
i = LocateVex(G, v);
j = LocateVex(G, w)
数据结构之有向无环图邻接表利用栈实现拓扑排序(参考整理严蔚敏数据结构)
最新推荐文章于 2022-04-12 13:58:54 发布