51nod1459迷宫问题—(迪杰斯特拉)
第一行4个整数n (<=500), m, start, end。n表示房间的个数,房间编号从0到(n - 1),m表示道路数,任意两个房间之间最多只有一条道路,start和end表示起点和终点房间的编号。
第二行包含n个空格分隔的正整数(不超过600),表示进入每个房间你的得分。
再接下来m行,每行3个空格分隔的整数x, y, z (0<z<=200)表示道路,表示从房间x到房间y(双向)的道路,注意,最多只有一条道路连结两个房间, 你需要的时间为z。
输入保证从start到end至少有一条路径。
一行,两个空格分隔的整数,第一个表示你最少需要的时间,第二个表示你在最少时间前提下可以获得的最大得分。
3 2 0 2
1 2 3
0 1 10
1 2 11
21 6 题意:中文题。。。。。。 思路:迪杰斯特拉求最短路。但与模板不同,这里添加了分值这一个变量。所以,如果遇见了两条一样长的路,则取能够获得的分值较高的那一条。 代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<cmath>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#define eps 1e-7
#define ll long long
#define inf 0x3f3f3f3f
#define pi 3.141592653589793238462643383279
using namespace std;
struct node{
int far,mark;
}; int map[][],visit[],value[]; void Dijkstra(int start,int end,int n)
{
node d[];
for(int i=; i<n; ++i)
{
d[i].mark = value[i];//初始化起点到达每个点的分值为这个点输入的分值
d[i].far = map[start][i];
}
visit[start] = ; int Min,flag,num = n;
while(--num)
{
Min = inf;
for(int i=; i<n; ++i)
{
if(!visit[i] && d[i].far < Min) //找出没走过的点中,起点能到达的最近的点
{
Min = d[i].far;
flag = i;
}
} visit[flag] = ; for(int j=; j<n; ++j) //更新路径
{
if(!visit[j])
{
if(map[flag][j] + d[flag].far < d[j].far) //如果起点到 j 的距离比通过flag到 j 的距离长
{ //就更新d[j]的长度为通过flag到 j 的长度
d[j].far = map[flag][j] + d[flag].far;
d[j].mark = d[flag].mark + value[j];
}
else if(map[flag][j] + d[flag].far == d[j].far) //一样长就取分值较大的
{
d[j].mark = max(d[flag].mark + value[j], d[j].mark);
}
}
}
}
if(start == end)
cout<<d[end].far<<' '<<d[end].mark<<endl;
else
cout<<d[end].far<<' '<<d[end].mark + value[start]<<endl;
} int main()
{
int n,m,start,end;
while(cin>>n>>m>>start>>end)
{
for(int i=; i<n; ++i) //初始化两点之间的距离为无穷大,自己到自己为0
for(int j=; j<n; ++j)
{
if(i == j)
map[i][j] = map[j][i] = ;
else
map[i][j] = map[j][i] = inf;
} memset(visit,,sizeof(visit)); for(int i=; i<n; ++i)
scanf("%d",&value[i]); int a,b,weight;
for(int i=; i<m; ++i)
{
scanf("%d%d%d",&a,&b,&weight);
if(map[a][b] > weight)
map[a][b] = map[b][a] = weight;
}
Dijkstra(start,end,n);
}
return ;
}
51nod1459迷宫问题—(迪杰斯特拉)的更多相关文章
- 最短路径之迪杰斯特拉(Dijkstra)算法
迪杰斯特拉(Dijkstra)算法主要是针对没有负值的有向图,求解其中的单一起点到其他顶点的最短路径算法.本文主要总结迪杰斯特拉(Dijkstra)算法的原理和算法流程,最后通过程序实现在一个带权值的 ...
- C#迪杰斯特拉算法
C#迪杰斯特拉算法 网上有许多版本的,自己还是写一个理解点 Dijkstra.cs public class Dijkstra { private List<Node> _nodes; p ...
- C++迪杰斯特拉算法求最短路径
一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...
- 【算法杂谈】LJX的迪杰斯特拉算法报告
迪杰斯特拉(di jie qi)算法 这里有一张图: 假设要求从1号节点到5号节点的最短路.那么根据迪杰斯特拉算法的思想,我们先看: 节点1,从节点1出发的一共有3条路,分别是1-6.1-3.1-2. ...
- C# 迪杰斯特拉算法 Dijkstra
什么也不想说,现在直接上封装的方法: using System; using System.Collections.Concurrent; using System.Collections.Gener ...
- 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)
迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...
- 图-最短路径-Dijktra(迪杰斯特拉)算法
1. 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉算法于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以起始 ...
- 迪杰斯特拉算法——PAT 1003
本文主要是将我对于我对于迪杰斯特拉算法的理解写出来,同时通过例题来希望能够加深对于算法的理解,其中有错误的地方希望大家指正. 迪杰斯特拉算法 我将这个算法理解成一个局部到整体的算法,这个方法确实越研究 ...
- 迪杰斯特拉(Java)
public class Dijsktra { public static void main(String[] args) { Dijsktra d=new Dijsktra(); int[][] ...
随机推荐
- const T & 的适用范围
我们往往在类中的函数体,重载操作中看到 const T & 的影子,以前还是比较纳闷. 对于非内部数据类型的参数而言,象void Func(A a) 这样声明的函数注定效率比较底.因为函数体内 ...
- 设置cassandra用户名和密码
参考http://zhaoyanblog.com/archives/307.html 修改cassandra.yaml配置文件 把默认的 authenticator: AllowAllAuthenti ...
- windows 内存分配回收检查工具
LeakDiag是微软一款检测memory leak的工具,使用比较简单 首先去下载一个ftp://ftp.microsoft.com/PSS/Tools/Developer%20Support%20 ...
- RecordingOptions录制设置选项
1.录制思考时间 2.录制方式 3.自定义证书 4.非资源选项
- 用VB实现COM+组件配置
在Windwos2000的管理工具里有一个“组件服务”工具,可以实现对COM+组件的应用的安装.启动.删除和对组件的安装.删除.这在安装一个有 COM+组件的应用系统时时非常有用的,我们可以通过程序控 ...
- 两种定时器 setInterval(一直执行) setTimeout(只执行一次)
//第一种 var obj = setInterval(function () { console.log(123); clearInterval(obj) }, 1000); //第二种 var t ...
- How to Integrate JCaptcha in Spring Security
The repository for JCaptcha is this one: <repository> <id>sourceforge-releases</id> ...
- c语言实现常见字符串函数strchr strstr strcmp atoi itoi(字符串换成整数)
好久没有更新博客了,刚刚出炉练练手的程序如下,很简单,没有考虑过多复杂的东西,有好的想法,欢迎指教: 字符查找函数: char *my_strchr(const char *s,int c) { ch ...
- maven exclusions version
<dependency> <groupId>cn.wonhigh</groupId> <artifactId>base-framework-web< ...
- HDFS设计理念
[HDFS设计理念] 1. 读取整个数据集的时间延迟比读取第一条记录的延迟更重要. 2. HDFS以高延迟为代价,要求低时间延迟数据访问的应用,不适合在HDFS上运行. 3. namenode决定了集 ...