#include <cstdio>
#include <vector>
using namespace std;
//单源最短路径——Dijkstra算法
//1、伪代码
//G为图,一般设成全局变量 ,数组d为源点到达各点的最短路径长度
/*Dijstra(G,d[],s)
{
初始化;
for(循环n次)
{
u=使d[u]最小的还未被访问的顶点的标号
记u已访问;
for(从u出发能到达的所有顶点v)
{
if(v未被访问&&以u为中介点使s到顶点v的最短距离d[v]更优)
{
优化d[v];
令v的前驱为u;//求最短路径本身时加此句
}
}
}
}*/
//代码
const int maxv=1020;
const int INF=1000000000;//一个很大的数
//1、邻接矩阵版
int n,G[maxv][maxv];//顶点数及邻接表
int d[maxv];//起点到各点的最短距离
void Dijkstra(int s)//s为源点
{
fill(d,d+maxv,INF); //fill函数将整个数组d设置为INF
d[s]=0; //起点s到达自生的距离为0
for(int i=0;i<n;++i)
{
int u=-1,min=INF;//u使d[u]最小,min存放最小的d[u];
for(int j=0;j<n;++j)
{
if(vis[j]==false&&d[j]<min)
{
u=j;
min=d[j];
}
}
//找不到小于INF的d[u],说明剩下的顶点和起点s不连通
if(u==-1)
return;
vis[u]=true;
for(int v=0;v<n;v++)
{
//v未被访问&&以u为中介点使s到顶点v的最短距离d[v]更优
if(vis[v]==false&&G[u][v]!=INF&&d[u]+G[u][v]&l
10.4 最短路径相关算法——点权、边权、最短路径条数(基础算法)
最新推荐文章于 2025-06-29 01:44:06 发布