c/c++ Dijkstra算法实现









#include
#include
#include 
#include
#include
#define M 100
#define N 100

//结构体一个图
typedef struct node
{
    int matrix[N][M];  //邻接矩阵
    int n;            //顶点数
    int e;            //边数
}MGraph;

//dist[i]记录v0到i的最短距离,path[i]记录最短路上v0到i的前一个顶点,v0是源顶点
void Dijkstra(MGraph g,int *dist,int *path,int v0)
{
    int i,j,k;
    //动态开辟bool型de visited,来标记顶点
    bool *visited=(bool*)malloc(sizeof(bool)*g.n);
    //将dist和path初始化
    for(i=0;i0)
        {
            dist[i]=g.matrix[v0][i];
            path[i]=v0;
        }
        //如果不直接相邻,权值设为无穷大
        else
        {
            dist[i]=INT_MAX;
            path[i]=-1;
        }
        //初始化标记
        visited[i]=false;

    }
    path[v0]=v0;
    dist[v0]=0;
    visited[v0]=true;
    //开始循环更新
    for(i=1;i0&&min+g.matrix[u][k]t,权值为w
    int s,t,w;
    //源顶点v0
    int v0;
    scanf("%d %d %d",&n,&e,&m);
    //初始化二维数组为0
    memset(g.matrix,0,sizeof(g.matrix));
    g.n=n;
    g.e=e;
    //将二维数组填好
    for(int i=0;i


你可能感兴趣的:(c/c++ Dijkstra算法实现)