首页 > 代码库 > POJ - Til the Cows Come Home(Dijkstra)
POJ - Til the Cows Come Home(Dijkstra)
题意:
有N个点,给出从a点到b点的距离,当然a和b是互相可以抵达的,问从1到n的最短距离
分析:
典型的模板题,但是一定要注意有重边,因此需要对输入数据加以判断,保存较短的边,这样才能正确使用模板。
题解
#include<iostream>#include<Queue> #include<cstdio>#include<vector>#include<string.h> using namespace std;#define maxn 2001#define inf 0x3f3f3fint map[maxn][maxn];int dist[maxn];bool visited[maxn];typedef pair<int,int> P;void dijkstra(int s,int n){ priority_queue<P,vector<P>,greater<P> > Q; memset(visited,0,sizeof(visited)); for(int i=1;i<=n;i++){ dist[i]=inf; } dist[s]=0; Q.push(P(0,s)); while(!Q.empty()){ int v=Q.top().second; Q.pop(); if(visited[v]) continue; visited[v]=true; for(int i=1;i<=n;i++){ int len=dist[v]+map[v][i]; if(dist[i]>len){ dist[i]=len; Q.push(P(len,i)); } } } }int main(){ int n,t; while(scanf("%d %d",&t,&n)!=EOF){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ map[i][j]=(i==j?0:inf); } } while(t--){ int b,c,d; scanf("%d %d %d",&b,&c,&d); if(map[b][c]>d){ map[b][c]=d; map[c][b]=d; } } dijkstra(n,n); printf("%d\n",dist[1]); } }
POJ - Til the Cows Come Home(Dijkstra)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。