#include
#include
#define MVNum 100 //最大顶点数
#define Maxint 32767
typedef char VertexType;
typedef int Adjmatrix;
typedef enum {FALSE,TRUE} boolean;//定义布尔型
typedef struct {
VertexType vexs[MVNum]; //顶点数组,假定为char型
Adjmatrix arcs[MVNum][MVNum];//邻接矩阵,假定为int型
}MGraph;
int D1[MVNum],P1[MVNum];
int D[MVNum][MVNum],P[MVNum][MVNum];
//#include"save.c"
//#include"dijkstra.c"
//#include"floyd.c"
void CreateMGraph(MGraph *G, int n,int e)
{
int i,j,k,w;
for(i=1;i<=n;i++)
G->vexs[i]=(char)i;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
G->arcs[i][j]=Maxint;//初始化邻接矩阵
printf("输入%d条边的i,j及w:\n",e);
for(k=1;k<=e;k++)//输入边建立邻接矩阵
{
scanf("%d,%d,%d",&i,&j,&w);
G->arcs[i][j]=w;
}
printf("有向图的存储结构建立完毕\n");
}
void Dijkstra(MGraph G, int v1,int n)//从v1顶点到其他顶点的长度
{
int D2[MVNum],P2[MVNum];
int v,i,w,min;
boolean S[MVNum];
for(v=1;v<=n;v++)
{
S[v]=FALSE;
D2[v]=G.arcs[v1][v];
if(D2[v]
else
P2[v]=0;
}
D2[v1]=0;S[v1]=TRUE;
for(i=2;i
min=Maxint;
for(w=1;w<=n;w++)
if(!S[w] && D2[w]
S[v]=TRUE;
for(w=1;w<=n;w++)
if(!S[w]&&D2[v]+G.arcs[v][w]
D2[w]=D2[v]+G.arcs[v][w];
P2[w]=v;
}
}
printf("路径长度 路径\n");
for(i=1;i<=n;i++)
{
printf("%5d",D2[i]);
printf("%5d",i); v=P2[i];
while(v!=0)
{
printf("<-%d",v);
v=P2[v];
}
printf("\n");
}
}
void Floyd(MGraph G, int n)//从起点到终点的最短路径
{
int i,j,k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(G.arcs[i][j]!=Maxint)
P[i][j]=j;
else
P[i][j]=0;
D[i][j]=G.arcs[i][j];
}
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(D[i][k]+D[k][j]
D[i][j]=D[i][k]+D[k][j];
P[i][j]=P[i][k];
}
}
}
}
This is a algorithm the point is not you know how the algorithm run then the region you should know.