#include <iostream>
typedef int vertex; //用顶点下标表示顶点
typedef struct adjvnode * ptrtoadjvnode;
struct adjvnode
{
vertex adjv; //邻接点下标
weighttype weight; //边权重
ptrtoadjvnode next;
};
typedef struct vnode
{
ptrtoadjvnode firstedge;
//datatype data; //顶点的数据
}adjlist[maxnum]; //邻接表的类型
typedef struct gnode * lgraph;
struct gnode
{
int nv; //顶点数
int ne; //边数
adjlist g; //邻接表
};
lgraph createlist(int vertexnum)
{
lgraph graph;
vertex v, w;
graph = (lgraph)malloc(sizeof(struct gnode))
graph->nv = vertexnum;
graph->ne = 0;
for(v = 0; v < graph->nv; v++)
{
graph->g[v].firstedge = NULL;
}
return graph;
}
//向图中插入边
typedef struct enode * edge;
struct enode
{
vertex v1, v2; //有向边
weighttype weight; //权重
};
void insertedge(lgraph graph, edge e)
{
//***********<插入边 v1, v2>************
ptrtoadjvnode newnode;
//为v2建立新的邻接点
newnode = (ptrtoadjvnode)malloc(sizeof(struct adjvnode));
newnode->adjv = e->v2;
newnode->weight = e->weight;
//将v2插入v1的表头
newnode->next = graph->g[e->v1].firstedge;
graph->g[e->v1].firstedge = newnode;
//**********<若是无向图,还要插入v2, v1>
//为v1建立新的邻接点
ptrtoadjvnode newnode;
newnode = (ptrtoadjvnode)malloc(sizeof(struct adjvnode));
newnode->adjv = e->v1;
newnode->weight = e->weight;
//将v1插入v2表头
newnode->next = graph->g[e->v2].firstedge;
graph->g[e->v2].firstedge = newnode;
}