样例输入:
1 6 9
1 2 1
1 3 12
2 3 9
2 4 3
3 5 5
4 3 4
4 5 13
4 6 15
5 6 4
样例输出:
0 1 8 4 13 17
Dijkstra算法代码如下:
1 6 9
1 2 1
1 3 12
2 3 9
2 4 3
3 5 5
4 3 4
4 5 13
4 6 15
5 6 4
样例输出:
0 1 8 4 13 17
Dijkstra算法代码如下:
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main() { int a[102][102]={0}; int dis[102]; int book[102]={0}; int h,n,m,k; int inf=99999999; cin>>h>>n>>m;//h表示单源最短路的源头,n表示共有顶点个数,m表示边的条数; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(i==j)a[i][j]=0; else a[i][j]=inf; } } int t1,t2,t3; for(int i=0;i<m;i++){ scanf("%d%d%d",&t1,&t2,&t3); a[t1][t2]=t3; } for(int i=1;i<=n;i++){ dis[i]=a[h][i]; } //下面就是Dijkstra核心算法 k=n-1; book[h]=1; while(k--){ int min1=inf,u; for(int i=1;i<=n;i++){ if(book[i]==0&&dis[i]<min1){ min1=dis[i]; u=i; } } book[u]=1; for(int i=1;i<=n;i++){ if(book[i]==0&&a[u][i]<inf&&dis[i]>a[u][i]+min1) dis[i]=a[u][i]+min1; } } for(int i=1;i<=n;i++){ cout<<dis[i]<<" "; } return 0; }