题意
一个顶点到其余顶点的最短路径
思路
Dijkstra
代码
#include <iostream>
using namespace std;
int main(){
int n,m,a,b,x,start,end;
while(cin>>n>>m){
int map[205][205];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
map[i][j]=99999;
}
}
while(m--){
cin>>a>>b>>x;
if(x<map[a][b]){
map[a][b]=map[b][a]=x;
}
}
cin>>start>>end;
int shortest[205],marked[205]={0},step;
for(int i=0;i<n;i++){//设定暂存最短路径的数组
shortest[i]=map[start][i];
}
shortest[start]=0;
for(int i=0;i<n;i++){
int min=99999;
for(int j=0;j<n;j++){//找出最短边
if(!marked[j]&&shortest[j]<min){
step=j;
min=shortest[j];
}
}
if(min==99999) break;
marked[step]=1;
for(int k=0;k<n;k++){//加入一个点后更新最短边集
if(!marked[k]&&shortest[step]+map[step][k]<shortest[k]){
shortest[k]=shortest[step]+map[step][k];
}
}
}
if(shortest[end]==99999){
cout<<"-1"<<endl;
} else{
cout<<shortest[end]<<endl;
}
}
}