hdu 2680 最短路径(dijkstra算法+多源最短路径单源化求最小值)这题有点意思
Choose the best route
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7062 Accepted Submission(s): 2301
Each case begins with three integers n, m and s,(n<1000,m<20000,1=<s<=n) n stands for the number of bus stations in this city and m stands for the number of directed ways between bus stations .(Maybe there are several ways between two bus stations .) s stands for the bus station that near Kiki’s friend’s home.
Then follow m lines ,each line contains three integers p , q , t (0<t<=1000). means from station p to station q there is a way and it will costs t minutes .
Then a line with an integer w(0<w<n), means the number of stations Kiki can take at the beginning. Then follows w integers stands for these stations.
#include<string.h>
#define max 0x3f3f3f3f
int map[1002][1002];
int dist[1002];
void dijkstra(int n,int v)
{
bool vis[1002];
int i,j;
for(i=0;i<=n;i++)//i从0开始了
{
dist[i]=map[v][i];
vis[i]=0;
}
dist[v]=0;
vis[v]=1;
for(i=0;i<=n;i++)//i从0开始了
{
int tmp=max;
int u=v;
for(j=0;j<=n;j++)//j从0开始了
if((!vis[j])&&dist[j]<tmp)
{
u=j;
tmp=dist[j];
}
vis[u]=1;
for(j=0;j<=n;j++)//j从0开始了
if((!vis[j])&&map[u][j]<max)
{
int newdist=dist[u]+map[u][j];
if(newdist<dist[j])
dist[j]=newdist;
}
}
}
int main()
{
int t,m,s;
while(scanf("%d%d%d",&t,&m,&s)!=EOF)
{
memset(map,max,sizeof(map));
int i,j,a,b,time;
for(i=0;i<m;i++)
{
scanf("%d%d%d",&a,&b,&time);
if(map[a][b]>time)
map[a][b]=time;//该题为有向图,所以在赋值上是单向的
}
int x;
scanf("%d",&x);
for(i=0;i<x;i++)//重点,这题刚开始给人的感觉就是多源最短路径求最小值,但是如果按照上述的方向写代码的话会出现超时的情况,所以
{ 此处是该题对多源最短路径单源化(自己命名)的一种简化方式,由于该题说有s个车站时紧邻着主人公Kiki的家的
int start; 所以我们自然会将s个车站看成是起点,但是那样超时,所以我们将之单源化,因为不论从哪个车站出发
scanf("%d",&start); 都可以看成是从家出发到车站栽倒目的地的,则将0点作为家 由于实际上的起点应该是车站,家只是我们用来简化这道题的
map[0][start]=0; 解法的一种方式,所以0点到车站所对应的点的距离全部赋值为0而到其他点的距离全赋值为无穷大。相应的在dijkstra() 函数中也会有变化。
return 0;
}
hdu 2680 最短路径(dijkstra算法+多源最短路径单源化求最小值)这题有点意思的更多相关文章
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- 单源最短路径Dijkstra算法,多源最短路径Floyd算法
1.单源最短路径 (1)无权图的单源最短路径 /*无权单源最短路径*/ void UnWeighted(LGraph Graph, Vertex S) { std::queue<Vertex&g ...
- 求两点之间最短路径-Dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.D ...
- 最短路径—Dijkstra算法
Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Di ...
- 最短路径-Dijkstra算法(转载)
注意:以下代码 只是描述思路,没有测试过!! Dijkstra算法 1.定义概览 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始 ...
- 最短路径——Dijkstra算法以及二叉堆优化(含证明)
一般最短路径算法习惯性的分为两种:单源最短路径算法和全顶点之间最短路径.前者是计算出从一个点出发,到达所有其余可到达顶点的距离.后者是计算出图中所有点之间的路径距离. 单源最短路径 Dijkstra算 ...
- 有向网络(带权的有向图)的最短路径Dijkstra算法
什么是最短路径? 单源最短路径(所谓单源最短路径就是只指定一个顶点,最短路径是指其他顶点和这个顶点之间的路径的权值的最小值) 什么是最短路径问题? 给定一带权图,图中每条边的权值是非负的,代表着两顶点 ...
- Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
- 网络最短路径Dijkstra算法
最近在学习算法,看到有人写过的这样一个算法,我决定摘抄过来作为我的学习笔记: <span style="font-size:18px;">/* * File: shor ...
- 最短路径-Dijkstra算法与Floyd算法
一.最短路径 ①在非网图中,最短路径是指两顶点之间经历的边数最少的路径. AE:1 ADE:2 ADCE:3 ABCE:3 ②在网图中,最短路径是指两顶点之间经历的边上权值之和最短的路径 ...
随机推荐
- php解压zip文件
<?php header("Content-type:text/html;charset=utf-8"); function get_zip_originalsize($fi ...
- LA 5061 LCA tarjan 算法
题目大意: 给定所有点的权值都为0,给定一棵树以后,每次询问都要求给定两点 x , y 和一个权值w,要求x,y路径上所有点权值加上w,最后求出每一个节点的值 这里因为查询和点都特别多,所以希望能最后 ...
- C# Async/Await异步函数原理
原理 与同步函数相比,CLR在执行异步函数时有几个不同的特点: 1. 并非一次完成,而且分多次完成 2. 并非由同一个线程完成,而是线程池每次动态分配一个线程来处理: 结合 ...
- java 基本类库包的作用
tools.jar:工具类库,它跟我们程序中用到的基础类库没有关系. Jre库包含的jar文件(jdk1.6):resources.jar.rt.jar.jsse.jar.jce.jar.charse ...
- iOS-生成国际化包-配置App多语言支持
标签: ios国际化 ios多语言支持 xcode多语言支持 xcode生成多语言 国际化 it 分类: 功能知识 如果你的App需要支持多国语言.那么,就应该为你的App应用添加“国际化”支 ...
- 使用Google API 下拉刷新或者增加数据 SwipeRefreshLayout
贴出布局代码: <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/id_swipe_ly" and ...
- swing LayoutManager 和多态
interface LayoutManager{ void show();}class FlowLayout implements LayoutManager{ public void show(){ ...
- 12-27cell 的可重用性(英雄列表应用性能的优化)
在英雄列表中动态生成cell的代码在中, - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N ...
- Nginx 安装编译配置
./configure --prefix=/usr/local/nginx-1.8.0 --with-http_ssl_module --with-http_spdy_module --with-ht ...
- GridView导出Excel
public void OUTEXCEL() { DataSet ds = new GW_T_DemandDAL().GetWzH(GetPersonInfoData(UserInfo), Reque ...