题目链接: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)的更多相关文章

  1. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  2. Dijkstra——单源最短路径

    算法思想 ①从一个源点开始,找距离它最近的点顶点v ②然后以顶点v为起点,去找v能到达的顶点w,即v的邻居 比较源点直接到 v的距离和(源点到v的距离+v到w的距离) 若大于后者则更新源点的到w的开销 ...

  3. 【模板 && 拓扑】 Dijkstra 单源最短路径算法

    话不多说上代码 链式前向星233 #include<bits/stdc++.h> using namespace std; ,_max=0x3fffffff; //链式前向星 struct ...

  4. Bellman-Ford 单源最短路径算法

    Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...

  5. Til the Cows Come Home(poj 2387 Dijkstra算法(单源最短路径))

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 32824   Accepted: 11098 Description Bes ...

  6. POJ 1135 -- Domino Effect(单源最短路径)

     POJ 1135 -- Domino Effect(单源最短路径) 题目描述: 你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行,两 ...

  7. 单源最短路径算法---Dijkstra

    Dijkstra算法树解决有向图G=(V,E)上带权的单源最短路径问题,但是要求所有边的权值非负. 解题思路: V表示有向图的所有顶点集合,S表示那么一些顶点结合,从源点s到该集合中的顶点的最终最短路 ...

  8. 单源最短路径——dijkstra算法

    dijkstra算法与prim算法的区别   1.先说说prim算法的思想: 众所周知,prim算法是一个最小生成树算法,它运用的是贪心原理(在这里不再证明),设置两个点集合,一个集合为要求的生成树的 ...

  9. 【转】Dijkstra算法(单源最短路径)

    原文:http://www.cnblogs.com/dolphin0520/archive/2011/08/26/2155202.html 单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路 ...

随机推荐

  1. 转 mysql front安装与使用教程 mysql 工具

    mysql front安装与使用教程 由 kaikai0220 创建,Alma 最后一次修改 2018-04-25 mysql front一款小巧的管理Mysql的应用工具,那么这个工具该如何安装和使 ...

  2. ORACLE 12.2 RAC TNS-12520 遭遇连接风爆 (connection storm)

    故障现象:数据库迁移到新环境刚过两天.今天生产核心数,断断继续的告警连接不上.这是问题! 如理思路:1.查看alert日志,日志无报错                  2.查看连接数,参数设置的20 ...

  3. maya2012安装失败如何卸载重装

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  4. Spring Aware

    spring依赖注入的最大亮点就是所有的bean感知不到spring容器的存在,但在实际开发中,我们不可避免的要用到spring容器本身的功能资源,这时,我们就必须意识到容器的存在(废话,都要跟容器进 ...

  5. 修改mysql表的字符集

    ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 修改数据库字符集: 代码如下: ALTER DAT ...

  6. [转]Asp.net Core中使用Session

    本文转自:http://www.cnblogs.com/sword-successful/p/6243841.html 前言 2017年就这么悄无声息的开始了,2017年对我来说又是特别重要的一年. ...

  7. 微信小程序里使用 Redux 状态管理

    微信小程序里使用 Redux 状态管理 前言 前阵子一直在做小程序开发,采用的是官方给的框架 wepy , 如果还不了解的同学可以去他的官网查阅相关资料学习:不得不说的是,这个框架确相比于传统小程序开 ...

  8. [LeetCode]14. Longest Common Prefix最长公共前缀

    Write a function to find the longest common prefix string amongst an array of strings. If there is n ...

  9. Java基础入门 - 标识符及其命名规范

    类名.变量名.方法名都称为标识符 标识符命名规范: 由字母(A-Z或a-z).数字.下划线(_)和美元符($)中的一种或多种组合而成 不可以数字开头 大小写敏感 关键字不能用作标识符 合法标识符如:D ...

  10. 构建web应用

    一.web服务器示例 var http = require('http'); http.createServer(function(req, res){ res.writeHeader(200, {C ...