hdu2544 迪杰斯特拉题目优化
迪杰斯特拉的用法不多讲,详见 点击打开链接 。
下面两个代码:
这个是用邻接矩阵存图的迪杰斯特拉。
#include<stdio.h>
int main()
{ int e[1005][1005],dis[1005],book[1005],i,j,n,m,t1,t2,t3,u,v,min;
int inf=9999999;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(m==n&&n==0) return 0;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
if(i==j) e[i][j]=0;
else e[i][j]=inf; }
}
for(i=1; i<=m; i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
e[t1][t2]=e[t2][t1]=t3;
}
for(i=1; i<=n; i++)
{
dis[i]=e[1][i];
}
for(i=0; i<=n; i++)
{
book[i]=0;
}
book[1]=1; for(i=1; i<n; i++)
{
min=inf;
for(j=1; j<=n; j++)
{
if(book[j]==0&&dis[j]<min)
{
min=dis[j];
u=j; }
}
book[u]=1;
for(v=1; v<=n; v++)
{
if(e[u][v]<inf)
if(dis[v]>dis[u]+e[u][v])
dis[v]=dis[u]+e[u][v];
} }
// for(i=1; i<=n; i++)
printf("%d\n",dis[n]);
}
return 0;
}
用数组模拟邻接表的迪杰斯特拉:数组模拟邻接表详见 点击打开链接
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MAX_SIZE 10005
const int INF=2e9+1e8; int start[MAX_SIZE],terminal[MAX_SIZE],value[MAX_SIZE];
int first[MAX_SIZE],nexts[MAX_SIZE],dis[MAX_SIZE],vis[MAX_SIZE];
int main()
{
int n,m,i,j,minn,k;
while(scanf("%d %d",&n,&m)!=EOF) // n个点m条边
{
if(n==m&&m==0) return 0;
for(i=1; i<=n; i++) // 初始化 first 数组
first[i]=-1;
for(i=1; i<=m; i++) // 存入m条边
{
int ss,ee,vv;
scanf("%d %d %d",&ss,&ee,&vv); start[i*2-1]=ss,terminal[i*2-1]=ee,value[i*2-1]=vv;
nexts[i*2-1]=first[start[i*2-1]];
first[start[i*2-1]]=i*2-1; start[i*2]=ee,terminal[i*2]=ss,value[i*2]=vv;
nexts[i*2]=first[start[i*2]];
first[start[i*2]]=i*2;
}
// 初始化 dis 数组
k=first[1];
for(i=1; i<=n; i++)
dis[i]=INF;
while(k!=-1)
{
dis[terminal[k]]=value[k];
k=nexts[k];
}
memset(vis,0,sizeof(vis)); // 标记当前位置是否来过 0 表示还没有来过
vis[1]=1;
int mid_pos;
int times=n-1;
// 迪杰斯特拉 核心代码
while(times--)
{
minn=INF;
for(j=1; j<=n; j++)
{
if(vis[j]==0&&dis[j]<minn)
{
minn=dis[j];
mid_pos=j;
}
}
if(minn==INF) continue;
vis[mid_pos]=1;
// 遍历 pos 点能到的地方
k=first[mid_pos];
while(k!=-1)
{
if(dis[mid_pos]+value[k]<dis[terminal[k]]) dis[terminal[k]]=dis[mid_pos]+value[k];
k=nexts[k];
}
}
// for(i=1; i<=n; i++)
// printf("%d ",dis[i]);
// printf("\n");
printf("%d\n",dis[n]);
}
return 0;
}
hdu2544 迪杰斯特拉题目优化的更多相关文章
- CodeForces - 449B 最短路(迪杰斯特拉+堆优化)判断最短路路径数
题意: 给出n个点m条公路k条铁路. 接下来m行 u v w //u->v 距离w 然后k行 v w //1->v 距离w 如果修建了铁路并不影响两点的最短距离, ...
- Bumped!【迪杰斯特拉消边、堆优化】
Bumped! 题目链接(点击) Peter returned from the recently held ACM ICPC World Finals only to find that his r ...
- bfs输出路径 && 最短路(迪杰斯特拉)输出路径
问题描述 解决方法 1.像第一个问题那就是最短路问题(我代码采用迪杰斯特拉算法)实现 2.换乘次数最少,那就用bfs广搜来寻找答案.但是我的代码不能保证这个最少换乘是最短路程 代码 1 #includ ...
- 最短路径-迪杰斯特拉(dijkstra)算法及优化详解
简介: dijkstra算法解决图论中源点到任意一点的最短路径. 算法思想: 算法特点: dijkstra算法解决赋权有向图或者无向图的单源最短路径问题,算法最终得到一个最短路径树.该算法常用于路由算 ...
- 迪杰斯特拉算法(Dijkstra) (基础dij+堆优化) BY:优少
首先来一段百度百科压压惊... 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法.是从一个顶点到其余各顶点的最短路径算法,解决的是有权图中最 ...
- 说说关于洛谷P4779迪杰斯特拉的堆优化
众所周知,这题必须要用堆优化的迪杰斯特拉的堆优化才能过,否则60分(错失一等奖) 我没有得过一等奖但还是要说: P4779 全过程: struct node//堆中的比较函数 { int dis; i ...
- Codeforces Gym 100342H Problem H. Hard Test 构造题,卡迪杰斯特拉
Problem H. Hard TestTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100342/at ...
- HDU 2680 最短路 迪杰斯特拉算法 添加超级源点
Choose the best route Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- 最短路——迪杰斯特拉算法 HDU_3790
初识最短路,今天只弄了一个迪杰斯特拉算法,而且还没弄成熟,只会最基本的O(n^2),想弄个优先队列都发现尼玛被坑爆了,那个不应该用迪杰斯特拉算法写 表示还是不会优化版的迪杰斯特拉算法,(使用优先队列) ...
随机推荐
- python实现显示安装进度条
一直很好奇那种安装进度条,或者启动程序时候显示的进度条是怎么实现的,学习了python之后,sys模块中有个方法可以实现,代码如下: 1 2 3 4 5 6 import sys,time ...
- 详解DNS,你真的懂吗?
what`s this ? 概念 域名系统(英文:DomainNameSystem,缩写:DNS)是互联网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.D ...
- .Net Core下使用RabbitMQ比较完备的两种方案(虽然代码有点惨淡,不过我会完善)
一.前言 上篇说给大家来写C#和Java的方案,最近工作也比较忙,迟到了一些,我先给大家补上C#的方案,另外如果没看我上篇博客的人最好看一下,否则你可能看的云里雾里的,这里我就不进行具体的方案 ...
- [Inside HotSpot] Serial垃圾回收器 (二) Minor GC
Serial垃圾回收器Minor GC 1. DefNewGeneration垃圾回收 新生代使用复制算法做垃圾回收,比老年代的标记-压缩简单很多,所有回收代码都位于DefNewGeneration: ...
- spark hbase
1 配置 1.1 开发环境: HBase:hbase-1.0.0-cdh5.4.5.tar.gz Hadoop:hadoop-2.6.0-cdh5.4.5.tar.gz ZooKeeper:zooke ...
- Spring MVC集成Spring Data Reids和Spring Session实现Session共享出现:No bean named 'springSessionRepositoryFilter' available
出现这个问题:No bean named 'springSessionRepositoryFilter' available的的原因: 1.Spring MVC加载了多个配置文件导致的,并不是版本问题 ...
- CAS 跨域原理
http://www.blogjava.net/rain1102/articles/227739.html CAS(Central Authentication Service) 是 Yale 大学发 ...
- git-flow 工作流 备忘清单
关于 git-flow 是一个 git 扩展集,按 Vincent Driessen 的分支模型提供高层次的库操作. 查看详情 ★ ★ ★ 这个备忘清单展示了 git-flow 的基本操作和效果. ★ ...
- 【转】Spring框架深入理解
参考这篇文章: http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/ Spring内部分为Beans, Context 和 ...
- BUPT复试专题—最小距离查询(2013)
题目描述 给定一个由小写字母a到z组成的字符串S,其中第i个字符为S[i](下标从0开始).你需要完成下面两个操作:INSERT c 其中c是一个待输入的字符.你需要在字符串的末尾添加这个字符.保证 ...