一个人的旅行

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 23396    Accepted Submission(s): 8142

Problem Description
尽管草儿是个路痴(就是在杭电待了一年多,竟然还会在校园里迷路的人,汗~),但是草儿仍然非常喜欢旅行,由于在旅途中 会遇见非常多人(白马王子,^0^),非常多事,还能丰富自己的阅历。还能够看漂亮的风景……草儿想去非常多地方。她想要去东京铁塔看夜景。去威尼斯看电影。去阳明山上看海芋,去纽约纯粹看雪景。去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,但是也不能荒废了训练啊。所以草儿决定在要在最短的时间去一个自己想去的地方。由于草儿的家在一个小镇上,没有火车经过,所以她仅仅能去邻近的城市坐火车(好可怜啊~)。

 
Input
输入数据有多组。每组的第一行是三个整数T,S和D。表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个;

接着有T行,每行有三个整数a,b。time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路)

接着的第T+1行有S个数。表示和草儿家相连的城市。

接着的第T+2行有D个数,表示草儿想去地方。
 
Output
输出草儿能去某个喜欢的城市的最短时间。
 
Sample Input
6 2 3
1 3 5
1 4 7
2 8 12
3 8 4
4 9 12
9 10 2
1 2
8 9 10
 
Sample Output
9
 解题思路
        这是一道求最短路径的问题,跟普通的最短路径不同的是这个题有多个起点,能够用for循环迪杰斯特拉来解答。
        也许会操心第一次迪杰斯特拉之后,那map数组的值不是已经发生变化了吗?第二次会受影响吗?
        答案是否定的,我们只须要初始now和ok数组就好,map数组不过存储距离,假设第一次之后map[i][j]的值为2,
        而第二次map[i][j]的值为3,非常显然我们会选择2,3直接排除掉了。
        for循环迪杰斯特拉之后的map数组是到全部地点的最短距离。不论从哪个原地出发。
错误原因
       OJ显示Runtime Error(ACCESS_VIOLATION)。造成这个错误的原因有两个,(1)数组开小了,(2)数组被越界了
代码
#include<stdio.h>
int map[1100][1100];
int ok[1100];
int now[1100];
int sta[1100];
int end[1100];
#define max 1007
int main()
{
int t,s,d;
int i,j,k;
int nowlen,nowx;
int a,b,l;
int ans;
while(scanf("%d%d%d",&t,&s,&d)!=EOF)
{
for(i=1;i<=max;i++)
for(j=1;j<=max;j++)
map[i][j]=max;//map初始为无穷大
for(i=1;i<=t;i++)
{
scanf("%d%d%d",&a,&b,&l);
if(map[a][b]>l)
map[a][b]=map[b][a]=l;
}//更新给定的距离
for(i=1;i<=s;i++)
scanf("%d",&sta[i]);
for(i=1;i<=d;i++)
scanf("%d",&end[i]);
for(i=1;i<=s;i++)
{//for循环迪杰斯特拉
for(j=1;j<=max;j++)
{
now[j]=max;
ok[j]=0;
}
now[sta[i]]=0;
ok[sta[i]]=1;//初始now和ok
for(k=1;k<=max;k++)
{
nowlen=max;
for(j=1;j<=max;j++)
{
if(!ok[j]&&nowlen>map[sta[i]][j])
{
nowlen=map[sta[i]][j];
nowx=j;
}
}//找到还没确定的距离之中最小的距离
now[nowx]=nowlen;
ok[nowx]=1;
for(j=1;j<=max;j++)
{
if(!ok[j]&&map[sta[i]][j]>now[nowx]+map[nowx][j])
map[sta[i]][j]=now[nowx]+map[nowx][j];
}//更新其它点到原点的距离
}
}
ans=max;
for(i=1;i<=s;i++)
for(j=1;j<=d;j++)
if(map[sta[i]][end[j]]<ans)
ans=map[sta[i]][end[j]];//找到最小的
printf("%d\n",ans);
}
return 0;
}

hdoj-2066-一个人的旅行(迪杰斯特拉)的更多相关文章

  1. hdoj 2066 一个人的旅行 【多源多汇最短路】

    题目:hdoj 2066 一个人的旅行 方法:缩点 + 最短路 分析:看了大神的一篇博客,讲冗余压缩的,然后就想找一个多源最短路练练手. 这个题目就是典型的多源多汇最短路 方法:把全部的源点压缩成一个 ...

  2. 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)

    Dijkstra算法 ———————————最后更新时间:2011.9.25———————————Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径. ...

  3. HDU 3339 In Action(迪杰斯特拉+01背包)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3339 In Action Time Limit: 2000/1000 MS (Java/Others) ...

  4. hdu 3339 In Action(迪杰斯特拉+01背包)

    In Action Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  5. C#迪杰斯特拉算法

    C#迪杰斯特拉算法 网上有许多版本的,自己还是写一个理解点 Dijkstra.cs public class Dijkstra { private List<Node> _nodes; p ...

  6. C++迪杰斯特拉算法求最短路径

    一:算法历史 迪杰斯特拉算法是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有向图中最短路径问题.迪杰斯特拉算法主要特点是以 ...

  7. 【算法杂谈】LJX的迪杰斯特拉算法报告

    迪杰斯特拉(di jie qi)算法 这里有一张图: 假设要求从1号节点到5号节点的最短路.那么根据迪杰斯特拉算法的思想,我们先看: 节点1,从节点1出发的一共有3条路,分别是1-6.1-3.1-2. ...

  8. C# 迪杰斯特拉算法 Dijkstra

    什么也不想说,现在直接上封装的方法: using System; using System.Collections.Concurrent; using System.Collections.Gener ...

  9. 迪杰斯特拉(dijkstra)算法的简要理解和c语言实现(源码)

    迪杰斯特拉(dijkstra)算法:求最短路径的算法,数据结构课程中学习的内容. 1 . 理解 算法思想::设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合 ...

随机推荐

  1. JavaScript编写风格指南 (三)

    七(七):严格模式 // 严格模式应当仅限在函数内部使用,千万不要在全局使用 //不好的写法:全局使用严格模式"user strict"; function doSomething ...

  2. 第10月第1天 storyboard uitableviewcell

    1. 如图,我们在Cell的属性界面对其进行了注册,identifier 为"TableViewCell" 不需要在 ViewDidLoad 对其进行注册了,如果进行注册的话,则对 ...

  3. 记关于webpack4下css提取打包去重复的那些事

    注意使用vue-cli3(webpack4),默认小于30k不会抽取为公共文件,包括css和js,已测试 经过2天的填坑,现在终于有点成果 环境webpack4.6 + html-webpack-pl ...

  4. (F - 超级英雄Hero HYSBZ - 1191 )匈牙利算法

    题目链接:https://cn.vjudge.net/contest/281037#problem/F 题目大意:中文题目 具体思路:可以看成二分图匹配,寻找最大匹配就可以了,注意当某一个匹配不到的时 ...

  5. Manacher's Algorithm 马拉车算法

    作用:求一个字符串中的最长子串,同时还可以求所有子串的长度. 题目链接: https://vjudge.net/contest/254692#problem/B 代码: #include<bit ...

  6. Javascript - Vue - vue对象

    vue提供了一整套前端解决方案,可以提升企业开发效率 vue的处理过程 app.js 项目入口,所有请求最先进入此模块进行处理 route.js 由app.js调用,处理路由的分发 controlle ...

  7. deeplearning.ai学习seq2seq模型

    一.seq2seq架构图 seq2seq模型左边绿色的部分我们称之为encoder,左边的循环输入最终生成一个固定向量作为右侧的输入,右边紫色的部分我们称之为decoder.单看右侧这个结构跟我们之前 ...

  8. 从Dying gasp功能看Linux的响应速度(zhuan)

    转自https://blog.csdn.net/qq_20405005/article/details/77967358 前一阵子在做dying gasp功能测试,过程中恰好测试到了Linux的响应速 ...

  9. Phantomjs 抓取、分析某个页面加载时浏览器发起的所有的子请求

    var page = require('webpage').create(), system = require('system'), address; if (system.args.length ...

  10. 使用eclipse构建Maven项目及发布一个Maven项目

    开发环境: Eclipse Jee Mars(截止2015年12月1日目前的最新版eclipse4.5),下载地址:http://www.eclipse.org/downloads/ 因为此版本已经集 ...