网络 (带权图) 的邻接表
邻接表的构造(头插法)图示
完整代码
#include<iostream>
#include<cstring>
using namespace std;
int n, e;//顶点数,边数
int vis[100];//标记
typedef struct node1
{
int dest;
int cost;//权值
struct node1* link;
}EdgeNode;
typedef struct node2
{
char data;//此处为字符类型,可更改
EdgeNode* firstAdj;
}VexList[100];
void GreateGraph(VexList v);//建图
int main()
{
VexList v;
GreateGraph(v);
return 0;
}
void GreateGraph(VexList v)//建图
{
cin >> n >> e;
for (int i = 1; i <= n; i++)
{
cin >> v[i].data;
v[i].firstAdj = NULL;
}
for (int i = 1; i <= e; i++)
{
int head, tail, weight;
cin >> tail >> head >> weight;//起点,终点,权值
EdgeNode* p = new EdgeNode;
//头插法
p->cost = weight;
p->dest = head;
p->link = v[tail].firstAdj;
v[tail].firstAdj = p;
//若为有向边,以下省略
p = new EdgeNode;
p->cost = weight;
p->dest = tail;
p->link = v[head].firstAdj;
v[head].firstAdj = p;
}
}