hdu3790 最短路径问题
来源:互联网 发布:深圳市灵沃软件 编辑:程序博客网 时间:2024/06/08 09:19
题目;http://acm.hdu.edu.cn/showproblem.php?pid=3790
题意:中文题~
想法:最短路径,两种做法,Dijkstra 和 spfa。Dijkstra搜索每一个点,然后标记vis[]为true。我用spfa试着写了写,spfa主要是把没有在队列中的节点放入队列中,一开始dis[]数组初始化为最大,否则会WA掉。。
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int INF=0x3f3f3f3f;queue <int> s;bool vis[1010];int link[1010][1010],dis[1010],cost[1010][1010],price[1010];int st,ed;int n,m;void spfa(){ for(int i=1;i<=n;i++) dis[i]=INF; dis[st]=0,price[st]=0; memset(vis,false,sizeof(vis)); vis[st]=true; s.push(st); while(!s.empty()){ int x=s.front(); s.pop(); vis[x]=false; for(int j=1;j<=n;j++){ if( dis[j]>dis[x]+link[x][j]|| (dis[j]==dis[x]+link[x][j]&&price[j]>price[x]+cost[x][j]) ){ dis[j]=dis[x]+link[x][j]; price[j]=price[x]+cost[x][j]; if(!vis[j]){ vis[j]=true; s.push(j); } } } } cout<<dis[ed]<<" "<<price[ed]<<endl;}int main(){ while(~scanf("%d%d",&n,&m)&&n&&m){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ link[i][j]=link[j][i]=INF; cost[i][j]=cost[j][i]=INF; } } for(int i=0;i<m;i++){ int a,b,d,p; scanf("%d%d%d%d",&a,&b,&d,&p); if(link[a][b]>d){ link[a][b]=link[b][a]=d; cost[a][b]=cost[b][a]=p; } else if(link[a][b]==d&&cost[a][b]>p){ cost[a][b]=cost[b][a]=p; } } cin>>st>>ed; spfa(); } return 0;}
0 0
- hdu3790 最短路径问题
- hdu3790 最短路径问题
- HDU3790--最短路径问题
- hdu3790 最短路径问题
- hdu3790 最短路径问题
- HDU3790:最短路径问题
- hdu3790 最短路径问题
- hdu3790最短路径问题
- hdu3790 最短路径问题
- hdu3790最短路径问题
- [hdu3790]最短路径问题
- HDU3790-最短路径问题
- hdu3790 最短路径问题
- HDU3790 最短路径问题
- HDU3790 最短路径问题
- HDU3790 最短路径问题
- hdu3790 最短路径问题
- hdu3790最短路径问题
- ETL 笔记之317
- 唉 来不及呀
- Mysql函数FIND_IN_SET()的使用方法
- 数据的离散化
- SQLite判断表是否存在
- hdu3790 最短路径问题
- 将用逗号隔开的字符串存入MAP里
- IOS中文排序
- **PC浏览器面试题.......【2014.03.17】
- hls 草案中关于m3u8 文件中一些tag的解释
- 需求边界蔓延(软件需求管理三)
- Hibernate映射set集合,order-by的作用
- Spring mvc(一)
- Android 百度推送使用总结