最短路径问题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 17946    Accepted Submission(s): 5374

Problem Description
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
Input
输入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)
Output
输出 一行有两个数, 最短距离及其花费。
Sample Input
3 2 1 2 5 6 2 3 4 5 1 3 0 0
Sample Output
9 11
这是个蛮不错的题,错的我体无完肤
中间只有一点逻辑错误,当然到现在也不是很清楚为什么会错,但是就是错了,还得多考虑考虑:
附ac代码:
#include<stdio.h>
#include<string.h>
#define N 0x3f3f3f
#include<algorithm>
using namespace std;
int map[1010][1010],dis[1010],cost[1010],vis[1010],m,n,money[1010][1010];void dj(int v){int i,j,k;memset(vis,0,sizeof(vis));for(i=1;i<=m;i++){dis[i]=map[v][i];cost[i]=money[v][i];//同样的思维,把花费给并进去. }vis[v]=1;for(i=1;i<=m;i++){int min=N;//但是仍旧按照距离的长短进行松弛 for(j=1;j<=m;j++){if(!vis[j]&&dis[j]<min){min=dis[j];k=j;}}vis[k]=1;for(j=1;j<=m;j++)//得到最短路径时,在考虑花费的问题 {if(!vis[j]&&dis[j]>dis[k]+map[k][j])//这一点还是不是十分清楚,为什么这种写法就对。 {dis[j]=dis[k]+map[k][j];//if(cost[j]>=cost[k]+money[k][j])cost[j]=cost[k]+money[k][j];}else if(!vis[j]&&dis[j]==dis[k]+map[k][j]&&cost[j]>cost[k]+money[k][j])cost[j]=cost[k]+money[k][j];//if(!vis[j]&&dis[j]>dis[k]+map[k][j])//为什么这种写法就错,确实不一样,但是不影响结果啊 //{//  dis[j]=dis[k]+map[k][j];//    cost[j]=cost[k]+money[k][j];//    if(cost[j]>cost[k]+money[k][j]&&dis[j]==dis[k]+map[k][j])//  cost[j]=cost[k]+money[k][j];//}}}}int main(){int i,j,x,y,z,p,w;while(scanf("%d%d",&m,&n)&&(m||n)){for(i=1;i<=m;i++)for(j=1;j<=m;j++)map[i][j]=money[i][j]=N;for(i=0;i<n;i++){scanf("%d%d%d%d",&x,&y,&z,&w);if(map[x][y]>=z){map[x][y]=map[y][x]=z;//if(money[x][y]>w)money[x][y]=money[y][x]=w;//把需要的花费和距离 一样用迪杰斯特拉算法。 }}int start,end;scanf("%d%d",&start,&end);dj(start);printf("%d %d\n",dis[end],cost[end]);}return 0;}

杭电3790最短路径问题相关推荐

  1. 杭电1874————单源最短路径(dijkstra)

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. 杭电OJ分类题目(4)-Graph

    原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...

  3. 杭电1044java实现dfs bfs

    Collect More Jewels 问题描述 它写在"夫人的书:创世之后,残酷的神摩洛克反抗了造物主马尔杜克的权威.摩尔从马尔杜克那里偷走了众神中所有神器中最强大的一件,也就是叶多尔的护 ...

  4. 杭电1874畅通工程续

    畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  5. 杭电 2544 最短路(bellman详解)

    首先介绍一下bellman算法: Bellman-ford算法是求含负权图的单源最短路径算法,效率很低,但代码很容易写.即进行持续地松弛(原文是这么写的,为什么要叫松弛,争议很大),每次松弛把每条边都 ...

  6. 2019杭电计算机考研经验贴(初试+复试)

    为期一年的杭电考研之旅结束啦!一年的付出总算没有白费,顺利上岸,进入杭电脑机交互实验室.今天和导师签了双选表,现在在回学校的高铁上,想着写一份经验贴,为下一届考研的学弟学妹们留下点东西. 一.初试 杭 ...

  7. hdoj杭电问题分类

    杭电上的题虽然多,但是一直苦于找不到问题分类,网页都是英文的,所以平时做题也没怎么看,今天仔细一看,问题分类竟然就在主页....做了那么久的题居然没发现,表示已经狗带..不要笑,不知道有没有像我一样傻 ...

  8. 杭电计算机考研(初试+复试)经验分享

    GitHub: KolinHuang 个人博客:KolHuang Blog 欢迎交流- 写在前头 离复试结束已经快半个月了,现在才想起来写这么一篇经验贴,供广大考研人参考参考- 本人报考的是杭州电子科 ...

  9. 杭电OJ第11页2065~2069算法题(C语言)

    目录 2065."红色病毒"问题 2066.一个人的旅行 2067.小兔的棋盘 2068.RPG的错排 2069.Coin Change 2065."红色病毒" ...

最新文章

  1. dede 怎样调用其它栏目的文章或者缩略图列表且有分页效果?
  2. Spring Boot 动态注入的两种方式
  3. 时代风口下,东软集团软件业务怎么转型?
  4. 网站通过了QQ安全认证了
  5. java喷泉编码_Java干货分享使用JS实现简单喷泉效果
  6. 未来 12 个月,哪种编程语言将会流行?
  7. Mac上运行windows,你还在用双系统or虚拟机?
  8. Java 6 变量 代码块
  9. 数据-第11课-双向链表
  10. ODB for mysql
  11. 小米路由器3无线网连接到服务器,小米路由器3无线中继(桥接)怎么设置?
  12. windows11关闭安全中心的病毒和威胁防护时,打不开,弹出打开应用需要打开windowsdefender链接问题
  13. java图片叠加_[原创]JAVA中图片上叠加文字的方法
  14. 【微信小程序】rpx
  15. 利用B站《无价之姐》弹幕合成词云跳舞
  16. 市面最经典的中文版需求分析说明书模板 详细讲解各目录含义 分离需求说明和需求分析
  17. IC芯片制造过程简介
  18. spring实战笔记_第4章
  19. 浅谈 yso的 Commons-Collections1 (cc1)反序列化链 如何手写这条链子
  20. LeetCode解题(1)----------8 字符串转换整数[go]

热门文章

  1. Qt图形测绘窗口部件介绍
  2. java语言程式设计——异常处理语法 3
  3. 关于AI和区块链的技术落地,你不知道的是……
  4. HTML5学习笔记简明版(11):新API
  5. python3.3使用tkinter实现猜数字游戏代码
  6. 电子政务方向:We7.Cloud政府云门户
  7. Android:通过Intent传递对象、Parcelable
  8. 把Python项目打包成exe文件
  9. Adobe Edge Animate --点击元件内部元素使元件其他元素发生改变
  10. 项目练习(二)—微博数据结构化