最短路
来源:互联网 发布:淘宝客怎么建站2016 编辑:程序博客网 时间:2024/06/05 06:21
例题:hdu 3790
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=3790
题意概括
给出一个无向图,图中每个节点的权值有两个,一个是距离,一个是花费,求起点到终点的最短距离及其花费。
解题思路
这个题跟模板题的差距就是多了一个权值,首先需要知道的是,距离的权重比花费重要,所以在最短路的函数里面首先判断的是距离,当距离一样的时候在判断他的花费。最后求出最短距离及其花费。
代码:
#include<stdio.h>#include<string.h>#include<ctype.h>#include<math.h>#include<algorithm>#define inf 0x3f3f3f3fusing namespace std;int n,xx,yy;int line[1010][1010],vis[1010],dis[1010],pp[1010][1010],disp[1010];void prime(int x,int y) {int i,j,minn,k,minnp;memset(vis,0,sizeof(vis));for(i=1; i<=n; i++) {dis[i]=line[x][i];disp[i]=pp[x][i];}vis[x]=1;for(j=1; j<n; j++) {minn=inf;for(i=1; i<=n; i++) {if(vis[i]==0) {if(dis[i]<minn) {minn=dis[i];minnp=disp[i];k=i;} else if(dis[i]==minn&&minn!=inf&&disp[i]<minnp) {minn=dis[i];minnp=disp[i];k=i;}}}vis[k]=1;for(i=1; i<=n; i++) {if(vis[i]==0) {if(minn+line[k][i]<dis[i]) {dis[i]=minn+line[k][i];disp[i]=disp[k]+pp[k][i];} else if(minn+line[k][i]==dis[i]&&disp[k]+pp[k][i]<disp[i]) {dis[i]=minn+line[k][i];disp[i]=disp[k]+pp[k][i];}}}}xx=dis[y];yy=disp[y];}int main () {int i,j,a,b,c,d,m;while(~scanf("%d %d",&n,&m)) {if(m==0&&n==0)break;memset(line,inf,sizeof(line));memset(pp,0,sizeof(pp));while(m--) {scanf("%d%d%d%d",&a,&b,&c,&d);if(line[a][b]==0||line[a][b]>c) {line[a][b]=line[b][a]=c;pp[a][b]=pp[b][a]=d;}}scanf("%d%d",&a,&b);prime(a,b);printf("%d %d\n",xx,yy);}return 0;}
0 0
- 最短路 & 次短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 最短路
- 【黑客浅析】像黑客一样思考
- Target runtime Apache Tomcat v6.0 is not defined
- matlab中strcmp函数的使用
- 使用php获取登录IP
- 测试管理
- 最短路
- 大数据性能调优之HBase的RowKey设计
- 关于C++ const 的全面总结
- Lint工具使用说明
- 【Unity3D基础知识点】——射线
- 利用 Flask+Redis 维护 IP 代理池
- SSSP整合:Context initialization failed
- codeforces 670C Cinema
- strust2 jquery ajax