#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 9
#define INFINITY 65535
typedef int Pathmatrix[MAXVEX];//存储最短路径
typedef int ShortPathTable[MAXVEX];//存储到最短路径的权值和
typedef char VertexType;
typedef int EdgeType;
typedef struct {
VertexType vers[MAXVEX];
EdgeType matrix[MAXVEX][MAXVEX];
int numVertexes,numEdges;
}MGraph;
void CreateGraph(MGraph *G)
{
int i,j,k,w;
printf("输入顶点数和边数");
scanf("%d%d",&G->numVertexes,&G->numEdges);
for(i=0;i<G->numVertexes;i++)
scanf(&G->numVertexes);
for(i=0;i<G->numVertexes;i++)
for(j=0;j<G->numVertexes;j++)
{
G->matrix[i][j]=INFINITY;
}
for(k=0;k<G->numEdges;k++)
{
scanf("%d%d%d",&i,&j,&w);
G->matrix[i][j]=w;
G->matrix[j][i]=G->matrix[i][j];
}
}
//P为前驱顶点下标数组
void ShortestPath(MGraph G,int v0,Pathmatrix *P,ShortPathTable *D)
{
int v,w,k,min;
int final[MAXVEX];//为1表示已经求得最短路劲
for(v=0;v<G.numVertexes;v++)//初始化
{
final[v]=0;
(*D)[v]=G.matrix[v][v0];
(*P)[v]=0;//初始化路径p数组为0
}
(*D)[v0]=0;
final[v0]=1;
for(v=1;v<G.numVertexes;v++)
{
min=INFINITY;
for(w=0;w<G.numVertexes;w++)
{
if(!final[w]&&[*D][w]<min)
{
k=w;//因为还继续循环,所以先存储到k
min=(*D)[w];
}
}
final[k]=1;
for(w=0;w<G.numVertexes;w++)
{
if(!final[w]&&min+G.matrix[k][w]<(*D)[w])
{
//说明找到了更短的路径
(*D)[w]=min+G.matrix[k][w];
(*P)[w]=k;
}
}
}
}
int main()
{
printf("Hello world!\n");
return 0;
}
最短路径迪杰斯特拉算法实现
最新推荐文章于 2023-04-19 02:47:48 发布