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分成两组,第一组为已求出最短路径的顶点集合 ...
随机推荐
- 第11月第23天 markedTextRange 崩溃
1. 在对textView.textField限制文字长度时,如果不做特殊处理,当联想文字加上已输入文字超出设定长度时,iOS 7.0系统会崩溃(ios 8.0以上系统做了处理,不会崩溃). http ...
- Redis持久化——RDB快照
一.是什么? 在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的Snapshot快照,它恢复时是将快照文件直接读到内存里. Redis会单独创建(fork)一个子进程来进行持久化,会先将数 ...
- linux C守护进程编写
linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件.守护进程是一种很有用的进程. Linux的大多数服 ...
- 数据库优化之mysql【转】
1. 优化流程图 mysql优化(主要增加数据库的select查询,让查询速度更快) 2. 优化mysql的方面 主要从以下四个方面去优化mysql ①存储层:如何选择一个数据库引擎,选择合适的字段列 ...
- TcxGrid 标题头高度
- 和为k的最长子数组及其延伸
问题1: /** * 问题描述: * 给定一个无序数组arr,其中元素可正.可负.可0, * 求arr所有的子数组中正数与负数个数相等的最长子数组长度 * * 解题思路:对数组进行处理,正数为1,负数 ...
- Windows环境下python的安装与使用
Windows环境下python的安装与使用 一.python如何运行程序 首先说一下python解释器,它是一种让其他程序运行起来的程序.当你编写了一段python程序,python解释器将读取程序 ...
- CAS单点登录流程
CAS的官方站点: https://apereo.github.io/cas/5.2.x/index.html 概念解读: The TGT (Ticket Granting Ticket), stor ...
- 009 jquery过滤选择器-----------(表单对象属性过滤选择器 与 表单选择器)
1.表单对象属性选择器 2.程序 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- Python实现截图
本文主要介绍了Python实现截图的两种方式,使用PIL的方法和不使用PIL的方法.文中也涉及到了一些位图的知识.