```c
#include<stdio.h>
#define max 100;
#define MAX_VERTEX_NUM 20
#define FALSE 0
#define TRUE 1
typedef struct ArcCell{
int adj;
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct {
char vexs[MAX_VERTEX_NUM];
AdjMatrix arcs;
int vexnum,arcnum;
}MGraph;
void ShortestPath_DIJ(MGraph G,int v0)
{
int final[MAX_VERTEX_NUM];
int D[MAX_VERTEX_NUM];
int length[MAX_VERTEX_NUM];
int i=0;
int min=0;
int w=0;
int v=0;
length[0]=0;
for(i=0;i<G.vexnum;i++)
{
final[i]=FALSE;
D[i]=G.arcs[v0][i].adj;
}
D[v0]=0;final[v0]=TRUE;
for(i=1;i<G.vexnum;i++)
{
min=max;
for(w=0;w<G.vexnum;w++)
{
if(final[w]==FALSE)
{
if(D[w]<min)
{
v=w;
min=D[w];
}
}
}
final[v]=TRUE;
for(w=0;w<G.vexnum;w++)
{
if(final[w]==FALSE&&(min+G.arcs[v][w].adj<D[w]))
{
D[w]=min+G.arcs[v][w].adj;
}
}
length[i]=D[i];
printf("顶点%c到顶点%c的最短路径长度为%d\n",G.vexs[v0],G.vexs[v],length[i]);
}
}
int main(void)
{
MGraph G;
int i,j;
int n;
char m;
printf("请输入有向图顶点的个数:\n");
scanf("%d",&n);
G.vexnum=n;
for(i=0;i<G.vexnum;i++)
{
printf("请输入有向图第%d个顶点的名称:\n",i);
getchar();
scanf("%c",&G.vexs[i]);
printf("请输入顶点%c到每个顶点间的距离\n",G.vexs[i]);
for(j=0;j<G.vexnum;j++)
{
scanf("%d",&G.arcs[i][j].adj);
}
}
ShortestPath_DIJ(G,0);
}