九度OJ 1008:最短路径问题 (最短路)
时间限制: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
思路:
典型最短路径问题,通常有两种方法: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:最短路径问题 (最短路)的更多相关文章
- [九度OJ]1008.最短路径问题
原题链接:http://ac.jobdu.com/problem.php?pid=1008 题目描述: 给你n个点,m条无向边,每条边都有长度d和花费p,给你起点s终点t,要求输出起点到终点的最短距离 ...
- 九度oj 题目1447:最短路
题目描述: 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ 1502 最大值最小化(JAVA)
题目1502:最大值最小化(二分答案) 九度OJ Java import java.util.Scanner; public class Main { public static int max(in ...
- 九度OJ,题目1089:数字反转
题目描述: 12翻一下是21,34翻一下是43,12+34是46,46翻一下是64,现在又任意两个正整数,问他们两个数反转的和是否等于两个数的和的反转. 输入: 第一行一个正整数表示测试数据的个数n. ...
- 九度OJ 1500 出操队形 -- 动态规划(最长上升子序列)
题目地址:http://ac.jobdu.com/problem.php?pid=1500 题目描述: 在读高中的时候,每天早上学校都要组织全校的师生进行跑步来锻炼身体,每当出操令吹响时,大家就开始往 ...
- 九度OJ 1531 货币面值(网易游戏2013年校园招聘笔试题) -- 动态规划
题目地址:http://ac.jobdu.com/problem.php?pid=1531 题目描述: 小虎是游戏中的一个国王,在他管理的国家中发行了很多不同面额的纸币,用这些纸币进行任意的组合可以在 ...
- 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)
题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但 ...
- 九度OJ 1371 最小的K个数 -- 堆排序
题目地址:http://ac.jobdu.com/problem.php?pid=1371 题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4 ...
随机推荐
- HDU 1998 奇数阶魔方【模拟填数/注意边界和细节】
奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- Ueditor 在线编辑器使用
ueditor在线编辑器插件 地址:http://ueditor.baidu.com/website/ 试用体验: 帮助文档:http://fex.baidu.com/ueditor/ 实操 引入 ...
- zoj 2615 Cells 栈的运用
题目链接:ZOJ - 2615 Scientists are conducting research on the behavior of a newly discovered Agamic Cell ...
- ios开发小结之app发布升级
在近两个月的开发中,遇到了挺多问题的,几天加班加点,最后还是在年前发布并更新了一个版本,欢迎下载无觅下载. 最头疼的问题是提交app审核,之前的工程不太规范,导致一些文件icon没有设置好,直接val ...
- 如何简单去掉dede后台的验证码 dedecms5.7 验证码怎么去掉
很多朋友都在找,如何去掉dede后台的验证码,每次登陆都很繁琐. 现在教大家一个dedecms5.7 验证码怎么去掉的最直接的方法: 在dedecms5.7[验证码安全设置]里,说修改后 ...
- CSS 属性选择器的深入挖掘
CSS 属性选择器,可以通过已经存在的属性名或属性值匹配元素. 属性选择器是在 CSS2 中引入的并且在 CSS3 中得到了很好拓展.本文将会比较全面的介绍属性选择器,尽可能的去挖掘这个选择器在不同场 ...
- 利用js实现table增加一行
简单的方法: 用jquery插件,比如设置该table的id为mytable <table id="mytable"> <tr> <td> 第一 ...
- ArcGIS教程:面积制表
摘要 计算两个数据集之间交叉制表的区域并输出表. 插图 使用方法 · 区域定义为输入中具有同样值的全部区.各区无需相连. 栅格和要素数据集都可用于区域输入. · 假设区域输入和类输入均为具有同样分辨率 ...
- 微信小程序 - 传参的几种方式
1. navigator navigator?第一参数&第二参数 .... 在传递页面的options可以拿到传递过来的参数 <navigator url='start-test/sta ...
- ORACLE数据库导表
今天在公司的server上面装一个系统,在数据库导表的时候一直导不进去,原先是10g的.dmp文件,导入11g.怀疑版本号不兼容,后来把.dmp表打开,把里面的版本号号改为11g,发现导入还是不行.i ...