图论基本算法练习
小呆要去位于 A 市的皮球家。小呆来到 A 市的车站,买了一张 A 市的地图,他发现这里的地形非常的复杂。A 市的街道一共有 N 个路口,M 条道路,每条道路连接着两个路口,并且有各自的长度。目前,小呆所在的车站位于编号为 1 的路口,而皮球家所在的路口编号为 N,小呆准备打出租车去,当然,路程越小,付的钱就越少。问题摆在眼前:请帮助小呆寻找一条最短路径,使得他可以花最少的钱到达皮球家。
输入
第一行有两个整数 N, M (N≤1000) 分别代表路口数和街道数。以下有 M 行用以描述各个街道,每行有三个数字 P1, P2, L,分别代表此街道起点编号,此街道终点编号以及此街道的长度。保证所给的数据可以构成连通图。
输出
一行一个整数,说明最短路径的长度。
C
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
vector<vector > mp(n+1,vector(n+1,INT_MAX));
int p1,p2,l;
for(int i=0;i<m;++i){
cin>>p1>>p2>>l;
mp[p1][p2]=l;
mp[p2][p1]=l;
}
vector dis(n+1,INT_MAX);
vector visited(n+1,false);
dis[1]=0;
while(1){
int index=-1;
int mind=INT_MAX;
for(int i=1;i<=n;++i){
if(visited[i])continue;
if(dis[i]<mind){
mind=dis[i];
index=i;
}
}
if(index==n){
cout<<dis[index]<<endl;
return 0;
}
visited[index]=true;
for(int i=1;i<&