【练习赛补题】问题 D: 最短路径问题 hdu3790【dfs】
来源:互联网 发布:用编程代码说我爱你 编辑:程序博客网 时间:2024/06/08 11:43
题目描述
给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离及其花费,如果最短距离有多条路线,则输出花费最少的。
输入
输入n,m,点的编号是1~n,然后是m行,每行4个数 a,b,d,p,表示a和b之间有一条边,且其长度为d,花费为p。最后一行是两个数 s,t;起点s,终点t。n和m为0时输入结束。
(1<n<=1000, 0<m<100000, s != t)
输出
输出 一行有两个数, 最短距离及其花费。
样例输入
3 21 2 5 62 3 4 51 30 0
样例输出
9 11思路:题面已经讲的很清楚了,需要注意,路径有两个权值,用dijsktra就可以解决,只不过我自己被提示带歪,用了dfs来写这道题,递归又成了硬伤,昨天才被吐槽过,不会递归还用什么dfs。。。自己错的地方如下:1:初始化。标记数组应该全部初始化为不能通过,即-1,输入边时,能通过一条边就将这条边初始化为0.2:递归出口。到达终点并不是结束条件,只有点全部搜索完才结束,然后回溯。3:更新最短距离和花费的条件。有两种情况:一种是最短距离相等时,比较花费,一种是最短距离不等,直接比较最短距离。
#include<stdio.h>#include<string.h>#define N 1010#define inf 0x3f3f3f3fint n,m,ans,min1,min2,cost,head,tail,sum1,sum2;int book[N][N];int dis[N],w[N];struct node{ int len,cost;};node e[N][N];void dfs(int x,int c,int d){ int y,i; if(x > n) return ; if(x == tail) { if(d < min1||d == min1 && c < min2) { min1 = d; min2 = c; } } for(i = 1; i <= tail; i ++) if(book[x][i]==0) { book[x][i] = -1; dfs(i,c+e[x][i].cost,d+e[x][i].len); book[x][i] = 0; } return;}int main(){ int i,j,t1,t2,t3,t4,u; while(scanf("%d%d",&n,&m),(n+m)!=0) { memset(book,-1,sizeof(book)); for(i = 1; i <= m; i ++) { scanf("%d%d%d%d",&t1,&t2,&t3,&t4); e[t1][t2].len = t3; e[t2][t1].len = t3; e[t1][t2].cost = t4; e[t2][t1].cost = t4; book[t1][t2] = 0; book[t2][t1] = 0; } scanf("%d%d",&head,&tail); min1 = min2 = inf; dfs(head,0,0); printf("%d %d\n",min1,min2); } return 0; }
阅读全文
0 0
- 【练习赛补题】问题 D: 最短路径问题 hdu3790【dfs】
- hdu3790 最短路径问题
- hdu3790 最短路径问题
- HDU3790--最短路径问题
- hdu3790 最短路径问题
- hdu3790 最短路径问题
- HDU3790:最短路径问题
- hdu3790 最短路径问题
- hdu3790最短路径问题
- hdu3790 最短路径问题
- hdu3790最短路径问题
- [hdu3790]最短路径问题
- HDU3790-最短路径问题
- hdu3790 最短路径问题
- HDU3790 最短路径问题
- HDU3790 最短路径问题
- HDU3790 最短路径问题
- hdu3790 最短路径问题
- android 日期工具类
- 自适应权值的立体匹配算法——AdaptWeight
- scss 数学运算,加减乘除运算
- Notepad++ 快捷键
- POJ 3281 Dining(拆点+最大流)
- 【练习赛补题】问题 D: 最短路径问题 hdu3790【dfs】
- Ubuntu系统环境变量详解PATH
- session 过时设置
- Spring AOP 和 AspectJ 之间的差别
- 数据结构~数据结构绪论
- js:return;return true;return false;区别
- gradle 项目从eclipse 迁移到idea笔记
- Matlab求解代数多项式方程组
- Oracle 11g——SQL 嵌套查询