题目:http://www.sqyoj.club/problem.php?id=1007
本题数据比较水,选用邻接矩阵存图,Dijkstra算法求最短路。
可以用前向星进行优化。
AC代码:
#include<cstdio>
#include<iostream>
using namespace std;
int n,m,s,e,x,y,z;
int f[2501][2501],dis[2501];
bool vis[2501];
int main(){
cin>>n>>m>>s>>e;
for(int i=1;i<=m;i++){
cin>>x>>y>>z;
f[x][y]=f[y][x]=z;
}
for(int i=1;i<=n;i++)dis[i]=1e9;
dis[s]=0;
for(int i=1;i<=n;i++){
int minn=1e9,v=1;
for(int j=1;j<=n;j++)
if(!vis[j] && minn>dis[j]){
minn=dis[j];
v=j;
}
vis[v]=1;
for(int j=1;j<=n;j++)
if(f[v][j] && !vis[j] && dis[j]>dis[v]+f[v][j]){
dis[j]=dis[v]+f[v][j];
pre[j]=v;
}
}
cout<<dis[e]<<endl;
return 0;
}