hdu 3790 最短路径问题
2014-03-06 16:11
363 查看
最短路径问题
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10037 Accepted Submission(s): 3064
[align=left]Problem Description[/align]
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
[align=left]Input[/align]
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点。n和m为0时输入结束。
(1<n<=1000, 0<m<100000, s != t)
[align=left]Output[/align]
输出 一行有两个数, 最短距离及其花费。
[align=left]Sample Input[/align]
3 2 1 2 5 6 2 3 4 5 1 3 0 0
[align=left]Sample Output[/align]
9 11
#include"stdio.h" #include"queue" using namespace std; #define N 1005 int dis ,v ,mark ; struct node { int id,d,p; friend bool operator<(node a,node b) { if(a.d==b.d) return a.p>b.p; return a.d>b.d; } }; void Inti(int n,int m) { int a,b,d,p; memset(dis,0,sizeof(dis)); memset(mark,0,sizeof(mark)); while(m--) { scanf("%d%d%d%d",&a,&b,&d,&p); if(dis[a][b]>d||dis[a][b]==0) { dis[a][b]=dis[b][a]=d; v[a][b]=v[b][a]=p; } else if(dis[a][b]==d) //注意重边 { if(v[a][b]>p) //边长相等取花费较少者 v[a][b]=v[b][a]=p; } } } void bfs(int n,int s,int t) { int i; priority_queue<node>q; node cur,next; cur.id=s; cur.d=0; cur.p=0; q.push(cur); while(!q.empty()) { cur=q.top(); q.pop(); s=cur.id; if(s==t) { printf("%d %d\n",cur.d,cur.p); break; } for(i=1;i<=n;i++) //把与当前点相连的点均入队 { if(!mark[s][i]&&dis[s][i]) //优化:这样就不会走回头路!! { //一个点 mark[s][i]=mark[i][s]=1; next.id=i; next.d=cur.d+dis[s][i]; next.p=cur.p+v[s][i]; q.push(next); } } } } int main() { int n,m,s,t; while(scanf("%d%d",&n,&m),n||m) { Inti(n,m); //数组初始化及输入功能 scanf("%d%d",&s,&t); bfs(n,s,t); } return 0; }
相关文章推荐
- hdu--3790--最短路径问题
- HDU 3790 最短路径问题(SPFA || Dijkstra )
- hdu3790——最短路径问题
- HDU 3790 最短路径问题(dijk最短路变形)
- HDU 3790 最短路径问题(dijkstra)
- HDU-3790-最短路径问题
- HDU 3790 最短路径问题 (dijkstra+路长和权值)
- HDU 3790最短路径问题 dijikstra算法
- hdu 3790 最短路径问题(多权值的最短路)
- HDU 3790 最短路径问题【Dijkstra】
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
- HDU-3790 最短路径问题(两个权值,Dijkstra,(含堆优化))
- hdu acm 3790 最短路径问题
- HDU 3790 - 最短路径问题(优化Dijkstra)
- hdu 3790 最短路径问题 spfa
- hdu 3790 最短路径问题
- hdu3790——最短路径问题
- hdu 3790 最短路径问题
- HDU 3790 最短路径问题 (dijkstra+路长和权值)
- hdu 3790 最短路径问题(Dijkstra)