c/c++ Dijkstra算法实现

本文介绍了一个使用C/C++实现Dijkstra算法的示例,通过邻接矩阵表示图,动态分配bool型变量记录顶点是否访问过,并初始化最短距离和路径。在循环中寻找未被标记且具有最小距离的顶点,不断更新最短路径。最后,展示了主函数中如何读取图的结构并调用Dijkstra函数。
摘要由CSDN通过智能技术生成








#include<stdlib.h>
#include<stdio.h>
#include <iostream>
#include<stack>
#include<string.h>
#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;i<g.n;i++)
    {
        //如果v0与i直接相连
        if(i!=v0&&g.matrix[v0][i]>0)
        {
            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[v
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值