#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))
最新推荐文章于 2024-06-07 17:45:43 发布