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 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路 ...
随机推荐
- spring boot——关于一个Mysql主键的问题
问题是这样的: 我现在有一个被@Entity标记的类TimeLine,其中id为主键. TimeLineController中有一个接收post请求的add()方法,这个方法会接受客户端传来的一个表单 ...
- Java日志组件2---Log4j(org.apache.log4j.Logger)
如果我们在项目中,需要记录的东西并不多,而且也不需要有太多区分,使用jdk的自带Log完全可以解决问题.但是,在开发的过程中,大多数项目都比较大,为方便找到程序的bug,都是需要系统的记录日志的.这里 ...
- 如何获取Android手机的唯一标识
有很多场景和需求你需要用到手机设备的唯一标识符. 在Android中,有以下几种方法获取这样的ID. 1. The IMEI: 仅仅只对Android手机有效: 1 2 TelephonyManage ...
- DB Intro - MySQL and MongoDB
mysql> CREATE TABLE tutorials_tbl( tutorial_id INT, tutorial_title VARCHAR(100), tutorial_author ...
- 怎么为android控件边缘添加阴影
为控件设置一个有阴影感的背景图片即可,可以使用shape 在自定义shape中增加一层或多层,并错开,即可显示阴影效果.为增加立体感,按钮按下的时候,只设置一层.我们可以通过top, bottom, ...
- Murano Weekly Meeting 2015.09.22
Meeting time: 2015.September.22th 1:00~2:00 Chairperson: Serg Melikyan, PTL from Mirantis Meeting s ...
- 打开/关闭网卡无线WIFI模块
@echo off title ------(Please run as Administrators)Please select------ :begin echo ---------------- ...
- [API]API运用实例
首先,在百度API:http://apistore.baidu.com/查找自己想用的api接口,例如:翻译: 利用postman工具进行测试: 返回结果为JSON字符串: { "errNu ...
- 连接MySql的时候报1130的错误解决办法
部署了一个 数据库采用Mysql的程序,sqlyog连接非本地的Mysql服务器的数据库,居然无法连接很奇怪,报1130错误,ERROR 1130: Host 192.168.3.100 is not ...
- Java中的内存泄漏分析说明
Java语言的一个关键的优势就是它的内存管理机制.你只管创建对象,Java的垃圾回收器帮你分配以及回收内存.然而,实际的情况并没有那么简单,因为内存泄漏在Java应用程序中还是时有发生的. 下面就解释 ...