经典算法研究系列:二之三续、Dijkstra 算法+Heap堆的完整c实现源码(二)

2014-11-23 21:45:58 · 作者: · 浏览: 32
t; //权重。
}ArcNode;

typedef struct VNode
{
ArcNode* firstarc;
}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct
{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;

编写几个功能函数:

void initALGraph(ALGraph* GPt,int vn) //初始化结点
{
GPt->arcnum = 0;
GPt->vexnum = vn;
for(int i=0;i

{
GPt->vertices[i].firstarc = NULL;
}
}

void insertArc(ALGraph* GPt,int vhead,int vtail,int w) //增加结点操作
{
ArcNode* arcNodePt = new ArcNode;
arcNodePt->nextarc = NULL;
arcNodePt->adjvex = vtail;
arcNodePt->weight = w;

ArcNode* tailPt = GPt->vertices[vhead].firstarc;
if(tailPt==NULL)
{
GPt->vertices[vhead].firstarc = arcNodePt;
}
else
{
while(tailPt->nextarc!=NULL)
{
tailPt = tailPt->nextarc;
}
tailPt->nextarc = arcNodePt;
}
GPt->arcnum ++;
}

void displayGraph(ALGraph G) //打印结点
{
ArcNode* arcNodePt;
for(int i=0;i {
arcNodePt = G.vertices[i].firstarc;
cout<<"vertex"< while(arcNodePt!=NULL)
{
cout<adjvex<<"("<<"weight"<weight<<")"<<" ";
arcNode