您的位置:首页 > 其它

hdu 2544 单源最短路径(邻接矩阵Dijkstra实现)

2014-02-12 19:56 489 查看
Problem: http://acm.hdu.edu.cn/showproblem.php?pid=2544

求商店到赛场最短时间

赤裸裸的单源最短路径

直接套最慢的邻接矩阵Dijkstra模版都0ms过

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define MAXN 110
#define INF 1000000
int n,m,Map[MAXN][MAXN],Dist[MAXN];//Map[][]存图 ,Dist[]存最短路长
void init(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)Map[i][j]=INF;
Map[i][i]=0;
}
int a,b,c;
for(int i=0;i<m;i++){
scanf("%d%d%d",&a,&b,&c);
Map[a][b]=Map[b][a]=min(Map[a][b],c);//不知图中是否含有重复边,这样写保证就算有重复边也没关系
}
}
void Dijkstra(int s){
bool Vis[MAXN];//Vis[]记录是否已求最短路
memset(Vis,false,sizeof(Vis));
for(int i=1;i<=n;i++)Dist[i]=Map[s][i];
Vis[s]=true;
for(int i=1;i<n;i++){
int Min=INF,k=0;
for(int j=1;j<=n;j++)if(!Vis[j] && Dist[j]<Min){
Min=Dist[j];
k=j;
}
if(k==n)return;//因为题目只需要求1-n的最短路,多余的不用管了
Vis[k]=true;
for(int j=1;j<=n;j++)if(!Vis[j] && Map[k][j]!=INF && Dist[j]>Dist[k]+Map[k][j])Dist[j]=Dist[k]+Map[k][j]//更新路径
}
}
int main()
{
while(scanf("%d%d",&n,&m),n+m){
init();
Dijkstra(1);
printf("%d\n",Dist
);
}
}


View Code
本来想写堆优化的Dijkstra的,但想想在这题上岂不大材小用浪费时间,上面已经写过一篇堆优化的Dijkstra了...可围观,>.<
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐