Dijkstra单源最短路径,POJ(2387)
题目链接:http://poj.org/problem?id=2387
Dijkstra算法: //求某一点(源点)到另一点的最短路,算法其实也和源点到所有点的时间复杂度一样,O(n^2);
图G(V,E),设置一个顶点集合S,不断贪心选择,指导S扩充为V,计算结束。
贪心选择的方法:节点个数n,源节点v,先在S中加入源节点v,初始化源节点,开始扩充S,找到一个点,他离S集合最近,加入到S集合中去,再利用这个点更新S本身中的最短路径。
题目大意:很裸的Dijkstra,但是这里有两点
1、图是双向的,存图的时候存双向图。
2、有重边,两个点之间有多条边,不断更新
模板:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#define NUM 1005
#define maxint (1<<29) using namespace std; int c[NUM][NUM];
int dist[NUM];
int pre[NUM]; ///Dijkstra
///顶点个数n,源点v
///数组dist保存从源点v到每个顶点的最短特殊路径长度
///数组prev保存每个顶点在最短路径上的前一个节点
void dijkstra (int n,int v,int dist[],int prev[],int c[][NUM])
{
int i,j;
bool s[NUM];
///初始化数组
for(i=; i<=n; i++)
{
dist[i] = c[v][i];
s[i]=false;
if(dist[i]>maxint) prev[i]=;
else prev[i] = v;
} ///初始化源节点
dist[v] = ;
s[v] = true;
for(i=; i<n; i++) ///其余节点
{
/// 在数组dist中寻找未处理节点的最小值
int tmp = maxint;
int u = v;
for(j=; j<=n; j++)
{
if(!s[j]&&(dist[j]<tmp))
{
u=j;
tmp=dist[j];
}
} s[u] = true; ///节点u加入s中
///利用节点u更新数组dist
for(j=; j<=n; j++)
{
if(!s[j]&&c[u][j]<maxint)
{
///newdist为从源节点到该点的最短特殊路径
int newdist = dist[u] + c[u][j];
if(newdist<dist[j])
{
///修改最短路径
dist[j]=newdist;
///修改j的前一个节点
prev[j]=u;
}
}
}
}
} ///根据数组pre计算单源最短路径的算法
/*
void traceback (int v,int i,int prev[])
{
printf("%d<--",i);
i=prev[i];
if(i!=v) traceback(v,i,prev);
if(i==v) printf("%d",i);
}
*/ ///根据数组pre计算源点v到所有其他顶点最短路径的迭代算法
/*
for(int j=2;j<=n;j++)
{
printf("%d",j);
int t=pre[j];
while(t!=1)
{
printf("<--%d",t);
t=pre[t];
}
printf("<--1\n");
}
*/ int main()
{
int n,v;
for(int i=; i<NUM; i++)
{
for(int j=; j<NUM; j++)
c[i][j] = maxint + ;
}
scanf("%d%d",&v,&n);
for(int i=; i<=v; i++)
{
int father,son,val;
scanf("%d%d%d",&father,&son,&val);
c[father][son]=c[son][father]=min(c[son][father],val);
}
dijkstra(n,n,dist,pre,c);
printf("%d\n",dist[]);
return ;
}
Dijkstra单源最短路径,POJ(2387)的更多相关文章
- Dijkstra 单源最短路径算法
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...
- Dijkstra——单源最短路径
算法思想 ①从一个源点开始,找距离它最近的点顶点v ②然后以顶点v为起点,去找v能到达的顶点w,即v的邻居 比较源点直接到 v的距离和(源点到v的距离+v到w的距离) 若大于后者则更新源点的到w的开销 ...
- 【模板 && 拓扑】 Dijkstra 单源最短路径算法
话不多说上代码 链式前向星233 #include<bits/stdc++.h> using namespace std; ,_max=0x3fffffff; //链式前向星 struct ...
- Bellman-Ford 单源最短路径算法
Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...
- Til the Cows Come Home(poj 2387 Dijkstra算法(单源最短路径))
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 32824 Accepted: 11098 Description Bes ...
- POJ 1135 -- Domino Effect(单源最短路径)
POJ 1135 -- Domino Effect(单源最短路径) 题目描述: 你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行,两 ...
- 单源最短路径算法---Dijkstra
Dijkstra算法树解决有向图G=(V,E)上带权的单源最短路径问题,但是要求所有边的权值非负. 解题思路: V表示有向图的所有顶点集合,S表示那么一些顶点结合,从源点s到该集合中的顶点的最终最短路 ...
- 单源最短路径——dijkstra算法
dijkstra算法与prim算法的区别 1.先说说prim算法的思想: 众所周知,prim算法是一个最小生成树算法,它运用的是贪心原理(在这里不再证明),设置两个点集合,一个集合为要求的生成树的 ...
- 【转】Dijkstra算法(单源最短路径)
原文:http://www.cnblogs.com/dolphin0520/archive/2011/08/26/2155202.html 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路 ...
随机推荐
- CENTOS 7 install mariadb 10.3
CENTOS install mariadb 10.3 cat >/etc/yum.repos.d/MariaDB.repo << 'EOF' [mariadb] name = Ma ...
- 如何将一个Maven项目转化成一个Eclipse项目
有时候我们需要将一个Maven项目导入到Eclipse中,直接作为一个普通的eclipse项目来导入是不行的,我们可以通过一个命令来实现:mvn eclipse:eclipse 1. 进入该Maven ...
- 对四次挥手中的TIME_WAIT状态的学习
TIME_WAIT状态不必多说 是属于四次挥手中的一种特殊状态 作用有两点简单明了 不废话 (1)可靠的实现TCP全双工连接的终止 (2)允许老的重复的.迟到的分节在网络中消逝 ...
- 硬盘和显卡的访问与控制(三)——《x86汇编语言:从实模式到保护模式》读书笔记03
上一篇博文我们用了很大的篇幅说了加载器,这一篇我们该说说用户程序了. 先看作者的源码吧. ;代码清单8-2 ;文件名:c08.asm ;文件说明:用户程序 ;创建日期:2011-5-5 18:17 ; ...
- php高级教程
PHP - 多维数组 多维数组指的是包含一个或多个数组的数组. 注释:数组的维度指示您需要选择元素的索引数. 对于二维数组,您需要两个索引来选取元素 对于三维数组,您需要三个索引来选取元素 PHP - ...
- c# 小数点格式化
1.只要求保留N位不四舍5入 float f = 0.55555f; int i =(int)(f * 100); f = (float)(i*1.0)/100 ...
- SQL——行转列,列转行
行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 2005 新增的运算符PIVOT来实现.用传统的方法,比较好理解.层次清 ...
- C#本期本周的算法
C#根据当前时间获取,本周,本月,本季度等时间段 DateTime dt = DateTime.Now; //当前时间 DateTime startWeek = dt.AddDays( - Conve ...
- jQuery 判断文本输入框的事件
1.实现以下需求: 输入框中输入内容,发表按钮变为蓝色背景,删除为空则变为原来的颜色 代码实现:通过判断event.target.value是否为空 2.input事件:文本输入框正在输入时生效 f ...
- C++ Knowledge series 5
Programming language evolves always along with Compiler's evolvement On the Cusp of the Object Model ...