C 语言实现邻接表Dijkstra算法求最短路径:
#include<stdio.h>
#include<stdlib.h>
#define MAXLEN 20
#define INFINE 99999
typedef struct ArcNode //定义结构体
{
int adjvex;//邻接顶点下标
int weight;//边的权值
struct ArcNode *next; //指向下一个邻边节点指针
}ArcNode;
typedef struct
{
char vertex;//顶点标志
ArcNode *firstedge;//保存第一个边节点指针
}VertexNode;
typedef struct
{
VertexNode adjlist[MAXLEN];//顶点数组
int vexnum; //顶点数
int arcnum; //边数
}AdjList;
//创建邻接表
AdjList *Created_Graph(AdjList *G)
{
int i, k, weight;
ArcNode *s;
char vex1, vex2; //顶点标志
int n1, n2;//顶点下标
printf("请输入顶点数和边数(输入格式为:顶点数,边数):\n");
scanf_s("%d,%d", &G->vexnum, &G->arcnum);
printf("请输入顶点信息:\n");
for (i = 1; i <= G->vexnum; i++)
{
printf("No.%d号顶点的信息:", i);
scanf_s(" %c", &G->adjlist[i].vertex,1);
G->adjlist[i].firstedge = NULL; //头节点指向为空;
}
printf("请输入边的信息(输入格式为:V1,V2):\n");
for (k = 1; k <= G->arcnum; k++) {
printf("请输入第%d条边:", k);
scanf_s(" %c, %c",