时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:8064

解决:2685

题目描述:
给你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 2
1 2 5 6
2 3 4 5
1 3
0 0
样例输出:
9 11
来源:
2010年浙江大学计算机及软件工程研究生机试真题

思路:

典型最短路径问题,通常有两种方法:Dijkstra和floyd算法。我比较喜欢用前一种。

最短路径算法的介绍可参见博客:http://blog.csdn.net/damenhanter/article/details/24771913

本题除了最短路径,还加上了花费,其实原理一样的。

代码:

#include <stdio.h>

#define N 1000
#define INF 1000000000 int D[N][N], P[N][N];
int visit[N], dis[N], pay[N]; void init(int n)
{
for (int i=0; i<n; i++)
{
visit[i] = 0;
for (int j=0; j<n; j++)
{
D[i][j] = INF;
P[i][j] = INF;
}
}
} void printdis(int n)
{
int i;
for (i=0; i<n-1; i++)
printf("%d ", dis[i]);
printf("%d\n", dis[i]);
} void dijkstra(int s, int n)
{
int i, j;
for (i=0; i<n; i++)
{
dis[i] = D[s][i];
pay[i] = P[s][i];
}
dis[s] = 0;
pay[s] = 0;
visit[s] = 1;
//printdis(n); int mind, minp;
int k;
for (i=0; i<n; i++)
{
mind = INF;
minp = INF;
for (j=0; j<n; j++)
{
if ( !visit[j] && (dis[j]<mind
|| dis[j]==mind && pay[j]<minp) )
{
mind = dis[j];
minp = pay[j];
k = j;
}
}
visit[k] = 1;
for (j=0; j<n; j++)
{
if ( !visit[j] && (dis[k]+D[k][j] < dis[j]
|| dis[k]+D[k][j] == dis[j] && pay[k]+P[k][j] < pay[j]) )
{
dis[j] = dis[k]+D[k][j];
pay[j] = pay[k]+P[k][j];
}
}
}
//printdis(n);
} int main(void)
{
int n, m, i;
int a, b, d, p;
int s, t; while (scanf("%d%d", &n, &m) != EOF)
{
if (n == 0 && m == 0)
break; init(n);
for(i=0; i<m; i++)
{
scanf("%d%d%d%d", &a, &b, &d, &p);
D[a-1][b-1] = D[b-1][a-1] = d;
P[a-1][b-1] = P[b-1][a-1] = p;
}
scanf("%d%d", &s, &t); dijkstra(s-1, n);
printf("%d %d\n", dis[t-1], pay[t-1]);
} return 0;
}
/**************************************************************
Problem: 1008
User: liangrx06
Language: C
Result: Accepted
Time:20 ms
Memory:8736 kb
****************************************************************/

九度OJ 1008:最短路径问题 (最短路)的更多相关文章

  1. [九度OJ]1008.最短路径问题

    原题链接:http://ac.jobdu.com/problem.php?pid=1008 题目描述: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离 ...

  2. 九度oj 题目1447:最短路

    题目描述: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线 ...

  3. 九度oj 题目1087:约数的个数

    题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...

  4. 九度OJ 1502 最大值最小化(JAVA)

    题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...

  5. 九度OJ,题目1089:数字反转

    题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...

  6. 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)

    题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...

  7. 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划

    题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...

  8. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述:     省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但 ...

  9. 九度OJ 1371 最小的K个数 -- 堆排序

    题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...

随机推荐

  1. Codeforces Gym10081 A.Arcade Game-康托展开、全排列、组合数变成递推的思想

    最近做到好多概率,组合数,全排列的题目,本咸鱼不会啊,我概率论都挂科了... 这个题学到了一个康托展开,有点用,瞎写一下... 康托展开: 适用对象:没有重复元素的全排列. 把一个整数X展开成如下形式 ...

  2. (8)ftp配置文档

    1.vsftpd文件夹中的ftpusers文件的作用 它是一个黑名单,ftpusers不受任何配制项的影响 该文件存放的是一个禁止访问FTP的用户列表 管理员不希望一些拥有过大权限的帐号(比如root ...

  3. 百度前端开发规范 by fex-team

    github:https://github.com/fex-team/styleguide 离线版本: 链接:http://pan.baidu.com/s/1gfr857l 密码:cvk3 注:只支持 ...

  4. How to Log Users Login and Logout Details Through Oracle Forms

    Log user's login and logout details in to table through Oracle Forms using POST-LOGON and PRE-LOGOUT ...

  5. Android Spinner In Toolbar

    As the title of the post suggest in this tutorial we will see how to have spinner widget inside the ...

  6. 从Android动画到贝塞尔曲线

    基础知识: 动画通过连续播放一系列画面,给视觉造成连续变化的图画.很通俗的一种解释.也很好理解.那么我们先来一个案例看看. 动画案例:百度贴吧小熊奔跑 效果: topic.gif 代码: <?x ...

  7. lampp、xampp安装文档

    第一步:去官网 看这个介绍http://www.apachefriends.org/zh_cn/xampp-linux.html#1677 第二步:下载安装包 2.1 要区分Linux是32位还是64 ...

  8. Mycat本地模式的自增长分表操作

    Mycat对表t_rc_rule_monitor做分表操作 在mysql上执行(没有t_rc_rule_monitor) DROP TABLE IF EXISTS t_rc_rule_monitor; ...

  9. mysql使用mysqldump 与 mysqlimport进行数据库迁移

    1.导入数据库 1)source source /home/platvt/product/pc2_create_tables.sql 2)mysqlimport 使用mysqlimport导入数据: ...

  10. 苹果证书的申请、unityoc交互基础

    注冊开发人员账号时:注意不要使用中国邮箱 99美金证书 :仅仅支持上传AppStore. 299美金证书:指的的我开发的应用是仅仅支持打包安装.企业级的. 假设申请了开发人员账号.也就是交了那几百美金 ...