hdoj-2066-一个人的旅行(迪杰斯特拉)
一个人的旅行
接着有T行,每行有三个整数a,b。time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路)
接着的第T+1行有S个数。表示和草儿家相连的城市。
接着的第T+2行有D个数,表示草儿想去地方。
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
9
#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-一个人的旅行(迪杰斯特拉)的更多相关文章
- hdoj 2066 一个人的旅行 【多源多汇最短路】
题目:hdoj 2066 一个人的旅行 方法:缩点 + 最短路 分析:看了大神的一篇博客,讲冗余压缩的,然后就想找一个多源最短路练练手. 这个题目就是典型的多源多汇最短路 方法:把全部的源点压缩成一个 ...
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
Dijkstra算法 ———————————最后更新时间:2011.9.25———————————Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径. ...
- HDU 3339 In Action(迪杰斯特拉+01背包)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=3339 In Action Time Limit: 2000/1000 MS (Java/Others) ...
- hdu 3339 In Action(迪杰斯特拉+01背包)
In Action Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 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分成两组,第一组为已求出最短路径的顶点集合 ...
随机推荐
- 玩转Hook——Android权限管理功能探讨(二)
距离我上一篇研究ptrace的随笔http://www.cnblogs.com/zealotrouge/p/3544147.html已经过去半年了,最近不忙的时候抽空继续研究了下.同样,参考了Prad ...
- HTTP协议之响应头Date与Age
HTTP没有为用户提供一种手段来区分响应是缓存命中的,还是访问原始服务器得到的.客户端有一种方法能判断响应是否来自缓存,就是使用Date首部.将响应中Date首部的值与当前时间进行比较,如果响应中的日 ...
- tensorboard遇到的坑
<ul><li>No graph definition files were found.</li></ul> <p>启动命令 tensor ...
- python实现两个经纬度点之间的距离和方位角
from:http://blog.csdn.net/zhuqiuhui/article/details/53180395 1. 求两个经纬点的方位角,P0(latA, lonA), P1(latB, ...
- BAT修改文本内容
@echo off (for /f "delims=" %%a in (文件名) do ( set "str=%%a" setlocal enabledelay ...
- 管中窥豹:从Page Performance看Nand Flash可靠性【转】
转自:https://blog.csdn.net/renice_ssd/article/details/53332746 如果所有的page performace在每次program时都是基本相同的, ...
- 『实践』Android之短信验证码(用的Mob短信验证)
1.参考资料 Mob网站:http://www.mob.com/ Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android 教程:htt ...
- 拓展中国剩余定理(exCRT)摘要
清除一个误区 虽然中国剩余定理和拓展中国剩余定理只差两个字,但他俩的解法相差十万八千里,所以会不会CRT无所谓 用途 求类似$$\begin{cases}x \equiv b_{1}\pmod{a_{ ...
- 全键盘操作Windows
计算机机用户在使用计算机的时候,是用键盘多一点?还是用鼠标多一点?如果是专业打字员,应该会说他使用键盘多一点,除此之外,多数人都会告诉你,他已经离不开鼠标了,没有鼠标,就不会操作电脑. 如果某一天 ...
- 在win7_64bit + ubuntu-12.04-desktop-amd64+VMware-workstation-full-10.0.1-1379776平台上安装ns-allinone-2.35
step1. ns-allinone-2.35的下载地址:http://www.isi.edu/nsnam/ns/ns-build.html#allinone step2. 在虚拟机中打开term ...