最短路径问题
来源:互联网 发布:手机淘宝怎么切换客服 编辑:程序博客网 时间:2024/06/01 19:21
最短路径问题
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
(1<n<=1000, 0<m<100000, s != t)
3 21 2 5 62 3 4 51 30 0
9 11
一开始用的Floyd算法,超时,然后用一个dijkstra就可以了,注意每次都要比较一下钱!#include<stdio.h>#include<string.h>using namespace std;#define maxn 1010#define inf 9999999int e[maxn][maxn],money[maxn][maxn],dis[maxn],book[maxn];int main(){int n,m,a,b,d,p,s,t,i,j,k,min,u,v;while(scanf("%d%d",&n,&m)!=EOF){if(n==0 && m==0)break;for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(i==j)e[i][j]=0;elsee[i][j]=inf;}}memset(money,inf,sizeof(money));memset(book,0,sizeof(book));while(m--){scanf("%d%d%d%d",&a,&b,&d,&p);if(e[a][b]>d){e[a][b]=d;e[b][a]=d;money[a][b]=p;money[b][a]=p;}}scanf("%d%d",&s,&t);/*for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(e[i][j]>e[i][k]+e[k][j]){e[i][j]=e[i][k]+e[k][j];money[i][j]=money[i][k]+money[k][j];}if(e[i][j]==e[i][k]+e[k][j]){if(money[i][j]>money[i][k]+money[k][j])money[i][j]=money[i][k]+money[k][j];}}printf("%d %d\n",e[s][t],money[s][t]);*/for(i=1;i<=n;i++){dis[i]=e[t][i];}book[t]=1;for(i=1;i<=n-1;i++){min=inf;for(j=1;j<=n;j++){if(book[j]==0 && dis[j]<min){min=dis[j];u=j;}}book[u]=1;for(v=1;v<=n;v++){if(e[u][v]<inf){if(dis[v]>dis[u]+e[u][v]){dis[v]=dis[u]+e[u][v];money[t][v]=money[t][u]+money[u][v];}else if(dis[v]==dis[u]+e[u][v]){if(money[t][v]>money[t][u]+money[u][v]){dis[v]=dis[u]+e[u][v];money[t][v]=money[t][u]+money[u][v];}}}}}printf("%d %d\n",dis[s],money[t][s]);}}
阅读全文
0 0
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- bzoj2439[中山市选2011] 序列 DP
- windows2008系统 IIS7 下设置伪静态的方法
- 0804Java 变量、包的定义
- mysql+mmm+proxy实现mysql读写分离及HA
- 1182: 查询记录(结构体专题)
- 最短路径问题
- 17个css知识点整理【下】
- spring-oauth2原理及使用
- Spark转换(transform)与动作(action)一览
- MySQL数据类型
- 开屏广告出了问题的处理和部分产品计划
- JS
- CSS布局整理
- Python正则表达式操作指南