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 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路 ...
随机推荐
- esper(1)-窗口概述
Time Window: Length Window: Time Batch Window: 带batch的是所有的都执行完后,在触发UpdateListener,如下边例子: public clas ...
- docker 命令详解(cp篇)
docker cp :用于容器与主机之间的数据拷贝. 1.从容器里面拷文件到宿主机 答:在宿主机里面执行以下命令 docker cp 容器名:要拷贝的文件在容器里面的路径 要拷贝到宿主机的相应路径 ...
- JavaSE---NIO
1.概述 1.1 BIO的问题: 读取输入流中的数据时,如果没有读到有效数据,该线程将被阻塞: 传统输入.输出流都是阻塞式的: 传统的输入.输出流都是通过字节移动处理: 面向流的输入.输出一次只能处理 ...
- 这是通过 Open Live Writer(是个博客编辑器) 发布的
Open Live Writer 是开源的win10上的博客编辑器
- Silverlight FullScreen 全屏
<UserControl x:Class="FullScreen.MainPage" xmlns="http://schemas.microsoft.com/win ...
- JobService 7.0 定时任务不生效
代码 // 构建JobInfo对象,传递给JobSchedulerService JobInfo.Builder builder = new JobInfo.Builder(JOB_ID,new Co ...
- QML 程序运行效率
同样的程序,在 Windows 下面启动时非常慢,而在 Linux 上启动时很快,一方面是因为 qml 界面的创建耗时不同,另一方面是因为读取文件的用时相差太大导致. On Linux 在 Linux ...
- Offic转换pdf 之asposeDLL插件
//excel转换 Workbook workbook = new Workbook(HttpContext.Current.Server.MapPath(docpath + "/" ...
- input type="image" 提交表单
提到<input type="image" />,说起来有些惭愧.之前的工作基本每周都要制作两到三个注册用户的网页.其中就用它提交表单. 那个时候我想当然的以为这是用 ...
- Eclipse jee 3.7常用插件安装手记
最近在折腾Maven,于是想重新配置一个Eclipse环境,插件安装挺折腾人的,尤其天朝的网络,你懂的,伤不起啊,因此特地把正确的过程记录下来,供大家参考,节省时间 1.官网下载eclipse-jee ...