#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define MAXSIZE 100
#define INF 999999999
int weight[MAXSIZE][MAXSIZE]; //边的权值
int shortest[MAXSIZE]; //源点到每个点的最短路径长度
bool vis[MAXSIZE]; //顶点访问标记
int preV[MAXSIZE]; //最短路径
int Dijkstra(int n, int src, int dest)
{
memset(vis, false, sizeof(vis));
int i;
for (i = 1; i <= n; i++)
{
shortest[i] = INF;
}
shortest[src] = 0;
preV[src] = 0;
for (i = 1; i <= n; i++)
{
int minV = INF;
int x, y;
//挑选出未访问且路径长度最短的顶点
for (y = 1; y <= n; y++)
{
if (!vis[y] && shortest[y] < minV)
{
minV = shortest[x = y];
}
}
vis[x] = true; //该顶点标记为已访问
for (y = 1; y <= n; y++)
{
//经过x顶点到y顶点是否路径更短
if (shortest[x]+weight[x][y] < shortest[y])
{
shortest[y] = shortest[x]+weight[x][y];
preV[y] &#
第4章 贪心算法,Dijkstra算法(邻接矩阵存储,时间复杂度为O(n^2))
最新推荐文章于 2023-12-24 23:39:34 发布
本文介绍了如何使用C++实现Dijkstra算法求解最短路径问题,以邻接矩阵存储图,并讨论了贪心算法在求解过程中起到的作用。代码示例展示了算法的具体步骤,包括初始化图、挑选最短路径节点以及更新路径长度。
摘要由CSDN通过智能技术生成