hdu3790最短路径问题 (用优先队列实现的)
(1<n<=1000, 0<m<100000, s != t)
1 2 5 6
2 3 4 5
1 3
0 0
- #include<stdio.h>
- #include<iostream>
- #include<queue>
- using namespace std;
- typedef struct n1
- {
- int x,dist,mony;
- friend bool operator<(n1 a,n1 b)
- {
- if(b.dist>a.dist)
- return b.dist<a.dist;
- else if(b.dist==a.dist&&b.mony>=a.mony)
- return b.mony<a.mony;
- }
- }node;
- node map[1005][1005],N[1005];
- int s,t,min_dist,min_mony;
- int vist[1005][1005];
- void set(int n,int m)
- {
- int i,j,n1,n2,d,p;
- for(i=1;i<=n;i++)
- {
- for(j=1;j<=n;j++)
- {
- map[i][j].dist=0;vist[i][j]=0;
- }
- }
- while(m--)
- {
- scanf("%d%d%d%d",&n1,&n2,&d,&p);
- if(map[n1][n2].dist==d)
- {
- if(map[n1][n2].mony>p)
- map[n1][n2].mony=map[n2][n1].mony=p;
- }
- else if(map[n1][n2].dist==0||map[n1][n2].dist>d)
- {
- map[n1][n2].dist=map[n2][n1].dist=d;
- map[n1][n2].mony=map[n2][n1].mony=p;
- }
- }
- scanf("%d%d",&s,&t);
- }
- void BFS(int n)
- {
- priority_queue<node> Q;
- node q,p;
- int i;
- q.mony=0; q.dist=0;q.x=t;
- Q.push(q);
- while(!Q.empty())
- {
- q=Q.top();
- Q.pop();
- if(q.x==s)
- {
- min_dist=q.dist;min_mony=q.mony;
- break;
- }
- for(i=1;i<=n;i++)
- if(map[q.x][i].dist&&!vist[q.x][i])
- {
- vist[q.x][i]=vist[i][q.x]=1;//这样就不会走重复的路
- p.dist=map[q.x][i].dist+q.dist;
- p.mony=map[q.x][i].mony+q.mony;
- p.x=i;//printf("%d %d %d\n",p.x,p.dist,p.mony);
- Q.push(p);
- }
- }
- }
- int main()
- {
- int n,m;
- while(scanf("%d%d",&n,&m)>0&&(n||m))
- {
- set(n,m);
- BFS(n);
- printf("%d %d\n",min_dist,min_mony);
- }
- }
hdu3790最短路径问题 (用优先队列实现的)的更多相关文章
- hdu3790最短路径问题(BFS+优先队列)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- HDU-3790 最短路径问题
最短路径问题 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...
- hdu-3790最短路径问题
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- HDU-3790最短路径问题,第十遍终于过了~
最短路径问题 Time Limit: 2000/1000 MS (J ...
- hdu3790最短路径问题
题意是这种,给你一个无向图, 每条边有距离和花费, 假设从第一个点到末点的最短路不唯一, 则输出最短路长度以及最少的花费. 否则输出长度和花费即可. 用传说中的链式向前星优化了一下边的存储, 写了个s ...
- hdu-3790 最短路径问题(双重权值)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Input ...
- HDU-3790 最短路径问题(双重权值)
Problem Description 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的. Inp ...
- hdu-3790 最短路径问题---dijkstra两重权值
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到 ...
- 最短路径-Dijkstra+Floyd+Spfa
Dijkstra算法: Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra ...
随机推荐
- Cocos2d-x使用android拍照功能加载照片内存过大,通过另存照片尺寸大小解决
使用2dx调用android拍照功能,拍照结束后在2dx界面显示拍照照片,如果不对照片做处理,会出现内存过大的问题,导致程序崩溃,如果仅仅另存拍照照片,则照片质量大小均下降,导致照片不够清晰,后来发现 ...
- Qt读取ANSI格式文件——利用QTextCodec将其他编码格式的QByteArray转换为Unicode格式,或者从文件中读出后直接做转换
t使用Unicode来表示字符串.但是通常需要访问一些非Unicode格式的字符串,例如打开一个GBK编码的中文文本文件,甚至一些非Unicode编码的日文,俄文等. Qt提供了QTextCodec类 ...
- SLF4J warning or error messages and their meanings(转)
The method o.a.commons.logging.impl.SLF4FLogFactory#release was invoked. Given the structure of the ...
- 基于visual Studio2013解决面试题之1007鸡蛋和篮子
题目
- VC 对话框背景颜色、控件颜色
系统环境:Windows 7软件环境:Visual C++ 2008 SP1本次目的:为对话框设置背景颜色.控件颜色 既然MFC对话框不好开发,那么现在我们来开始美化我们的对话框.为对话框设置背景颜色 ...
- 写一个函数int get(),这个函数运行一次可以从V[N]里随机取出一个数,而这个数必须是符合1/N平均分布的
题目:有一个函数int getNum(),每运行一次可以从一个数组V[N]里面取出一个数,N未知,当数取完的时候,函数返回NULL.现在要求写一个函数int get(),这个函数运行一次可以从V[N] ...
- 1.0.x-学习Opencv与MFC混合编程之---视频运动检测
源代码地址: http://download.csdn.net/detail/nuptboyzhb/3961668 版本1.0.x新增内容 视频运动检测 Ø 新建菜单项,Learning OpenCV ...
- python模块介绍- HTMLParser 简单的HTML和XHTML解析器
python模块介绍- HTMLParser 简单的HTML和XHTML解析器 2013-09-11 磁针石 #承接软件自动化实施与培训等gtalk:ouyangchongwu#gmail.comqq ...
- linux中段错误的处理
在 Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的“段错误”(Segmentation Fau ...
- HDU 4709 Herding 几何题解
求全部点组成的三角形最小的面积,0除外. 本题就枚举全部能够组成的三角形,然后保存最小的就是答案了.由于数据量非常少. 复习一下怎样求三角形面积.最简便的方法就是向量叉乘的知识了. 并且是二维向量叉乘 ...