较之上一篇只是增加了Dijkstra函数
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define MAX 100
#define INF 1000//(~(0x1<<31)) // 最大值(即0X7FFFFFFF)
#define isLetter(a) ((((a)>='a')&&((a)<='z')) || (((a)>='A')&&((a)<='Z')))
#define LENGTH(a) (sizeof(a)/sizeof(a[0]))
// 邻接表中表对应的链表的顶点
typedef struct _ENode
{
int ivex; // 该边的顶点的位置
int weight; // 该边的权
struct _ENode *next_edge; // 指向下一条弧的指针
}ENode, *PENode;
// 邻接表中表的顶点
typedef struct _VNode
{
char data; // 顶点信息
ENode *first_edge; // 指向第一条依附该顶点的弧
}VNode;
// 邻接表
typedef struct _LGraph
{
int vexnum; // 图的顶点的数目
int edgnum; // 图的边的数目
VNode vexs[MAX];
}LGraph;
/*
* 返回ch在matrix矩阵中的位置
*/
static int get_position(LGraph G, char ch)
{
int i;
for(i=0; i<G.vexnum; i++)
if(G.vexs[i].data==ch)
return i;
return -1;
}
/*
* 读取一个输入字符
*/
/*
* 将node链接到list的末尾
*/
static void link_last(ENode *list, ENode *node)
{
ENode *p =list;
while(p->next_edge)
p = p->next_edge;
p->next_edge = node;
}
// 边的结构体
typedef struct _edata
{