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