hdu3790 最短路径问题 dijstra算法
2013-08-17 11:25
197 查看
直接套用dijstra算法,记得更新花费。 这题被坑了,同一条路居然有不同的距离和花费,所以赋值map的时候就要注意了,记得更新呀。。。
#include<stdio.h> #include<string.h> #defineINF200000000 intmap[1001][1001],mapc[1001][1001],visit[1001],dist[1001],cost[1001],n; intdijstra(ints,intt) { inti,j,k,min,min1,v; memset(visit,0,sizeof(visit)); for(i=1;i<=n;i++) { dist[i]=map[s][i]; cost[i]=mapc[s][i]; } dist[s]=0; cost[s]=0; visit[s]=1; for(i=1;i<=n;i++) { for(j=1,min=INF,v=s;j<=n;j++) { if(dist[j]<min&&visit[j]!=1) { min=dist[j]; v=j; } } for(j=1;j<=n;j++) { if(dist[v]+map[v][j]<dist[j]) { dist[j]=dist[v]+map[v][j]; cost[j]=cost[v]+mapc[v][j]; } elseif(dist[v]+map[v][j]==dist[j]) { if(cost[v]+mapc[v][j]<cost[j]) { cost[j]=cost[v]+mapc[v][j]; } } } visit[v]=1; } printf("%d%d\n",dist[t],cost[t]); } intmain() { intm,a,b,d,p,i,j,k,s,t; while(scanf("%d%d",&n,&m)!=EOF&&(n!=0||m!=0)) { for(i=1;i<=n;i++) for(j=1;j<=n;j++) { map[i][j]=INF; mapc[i][j]=INF; } for(i=1;i<=m;i++) { scanf("%d%d%d%d",&a,&b,&d,&p); if(map[a][b]>d) { map[a][b]=d; map[b][a]=d; mapc[a][b]=p; mapc[b][a]=p; } elseif(mapc[a][b]==d) { if(mapc[a][b]>p) { mapc[a][b]=p; mapc[b][a]=p; } } } scanf("%d%d",&s,&t); dijstra(s,t); } return0; }
相关文章推荐
- hdu 3790 最短路径问题(spfa)
- HDU--3790:最短路径问题 (Dijkstra算法)
- HDU--3790最短路径问题 【Dijkstra】
- HDU 3790 最短路径问题 (dijkstra+路长和权值)
- 最短路径问题 hdu 3790
- HDU 3790 最短路径问题
- hdu--3790--最短路径问题
- hdu 3790 最短路径问题
- HDU 3790 最短路径问题(Dijkstra)
- HDU-3790 最短路径问题(两个权值,Dijkstra,(含堆优化))
- hdu 3790 最短路径问题
- hdu 3790 最短路径问题(距离和费用)
- HDU 3790 最短路径问题
- HDU 3790 最短路径问题
- hdu--最短路径问题--3790
- hdu 3790 最短路径问题(最短路,Dijsktra)
- hdu 3790 最短路径问题 最短路Dijkstra
- HDU--杭电--3790--最短路径问题
- HDU 3790 最短路径问题
- HDU 3790 最短路径问题 dij