最短路径迪杰斯特拉算法实现

来源:互联网 发布:烟雾效果app软件 编辑:程序博客网 时间:2024/05/21 18:43
#include <stdio.h>#include <stdlib.h>#define MAXVEX 9#define INFINITY 65535typedef 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;}

0 0