HDU 3790 最短路径问题(SPFA || Dijkstra )
2014-07-29 09:40
218 查看
题目链接
题意 : 中文题不详述。
思路 :无论是SPFA还是Dijkstra都在更新最短路的那个地方直接将花费更新了就行,还有别忘了判重边,话说因为忘了判重边WA了一次。
View Code
题意 : 中文题不详述。
思路 :无论是SPFA还是Dijkstra都在更新最短路的那个地方直接将花费更新了就行,还有别忘了判重边,话说因为忘了判重边WA了一次。
#include <cstdio> #include <cstring> #include <algorithm> #define maxn 1001 using namespace std; const int inf=1<<28; int g[maxn][maxn]; int cost[maxn][maxn]; int n,m,a,b,d,p,s,e; bool vis[maxn]; int dis[maxn],c[maxn]; void inti() { for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { if(i==j) { g[i][j]=0; cost[i][j]=0; } else { g[i][j]=inf; cost[i][j]=inf; } } } } void dijkstra(int str) { memset(vis,false,sizeof(vis)); for(int i=1; i<=n; i++) { dis[i]=g[str][i]; c[i]=cost[str][i]; } dis[str]=0; c[str]=0; vis[str]=true; for(int i=1; i<n; i++) { int m=inf,x; for(int y=1; y<=n; y++) if(!vis[y]&&dis[y]<m) m=dis[x=y]; vis[x]=true; for(int y=1; y<=n; y++) { if(!vis[y]&&g[x][y]!=inf) { if(dis[y]>dis[x]+g[x][y]) { dis[y]=dis[x]+g[x][y]; c[y]=c[x]+cost[x][y]; } else if(dis[y]==dis[x]+g[x][y]) { if(c[y]>c[x]+cost[x][y]) c[y]=c[x]+cost[x][y]; } } } } } int main() { while(scanf("%d%d",&n,&m)!=EOF) { if(n==0&&m==0) break; inti(); for(int i=0; i<m; i++) { scanf("%d%d%d%d",&a,&b,&d,&p); if(d<g[a][b]) { g[a][b]=g[b][a]=d; cost[a][b]=cost[b][a]=p; } } scanf("%d%d",&s,&e); dijkstra(s); printf("%d %d\n",dis[e],c[e]); } return 0; }
View Code
相关文章推荐
- hdu 3790 最短路径问题(spfa)
- HDU--3790最短路径问题 【Dijkstra】
- HDU-3790 最短路径问题(两个权值,Dijkstra,(含堆优化))
- HDU 3790 最短路径问题 (SPFA)
- HDU 3790:最短路径问题【Dijkstra】
- hdu 3790 最短路径问题(spfa)
- hdu 3790 最短路径问题(Dijkstra)
- HDU-3790 最短路径问题(Dijkstra)
- HDU-3790 最短路径问题 (Dijkstra)
- HDU - 3790 最短路径问题Dijkstra
- hdu 3790 最短路径问题(Dijkstra)
- hdu 3790 最短路径问题(dijkstra)
- HDU 3790 最短路径问题 Dijkstra
- HDU 3790 最短路径问题【最短路 dijkstra 双权值】
- HDU 3790 最短路径问题(Dijkstra)
- hdu 3790 最短路径问题 spfa
- HDU -- 3790 最短路径问题 (Dijkstra+priority_queue)
- hdu 3790 最短路径问题 最短路Dijkstra
- HDU 3790 最短路径问题(Dijkstra)
- hdu 3790 最短路径问题 spfa