// dijkstra 单源最短路径算法
#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
const int N=111;
// vv 二维矩阵图 start 起始顶点
vector<int> dijkstra( vector< vector<int> >& vv,int start )
{
int i,j,min_dis,tpos;
int n=vv.size(); // 图的顶点个数
vector<bool> used( n,0 ); // 标记已作为中间结点完成访问的顶点
vector<int> dis( n,0 ); // 存储 start 到其他顶点的最短路径
for( i=0;i<n;i++ )
dis[i]=vv[start][i]; // 初始化起始点到其他顶点的距离
used[start]=1; // 标记起始顶点 表示已完成访问
for( i=0;i<n;i++ )
{
min_dis=INF;
tpos=0; // 当前未完成访问的结点中最短距离点的编号
for( j=0;j<n;j++ ) // 寻找 tpos
if( used[j]==0 && min_dis > dis[j] )
{
min_dis=dis[j];
tpos=j;
}
for( j=0;j<n;j++ ) // min_dis
if( used[j]==0 && dis[j] > dis[tpos] + vv[tpos][j] )
dis[j]=dis[tpos]+vv[tpos][j];
used[tpos]=1;
}
return dis;
}
int main()
{
vector< vector<int> > vv;
int n,i,j;
while( cin>>n )
{
vv.clear();
for( i=0;i<n;i++ )
{
vv.push_back( vector<int>() );
for( j=0;j<n;j++ )
vv[i].push_back(INF);
vv[i][i]=0;
}
// ... // 存图
vector<int> dis=dijkstra( vv,0 );
// ...
}
return 0;
}
Graph theory_dijkstra template_single source shortest path algorithm
Guess you like
Origin blog.csdn.net/qq_63173957/article/details/123920657
Ranking