dijk
.....................用矩阵存.....................
1 int mp[N][N];
bool p[N];
int dist[N];
void dijk(int s , int n)
{
int i , j , k ;
for( i = ; i <= n ;i++)
{
p[i] = false;
dist[i] = mp[s][i];
}
p[s] = true;
dist[s] = ;
for(i = ; i < n ; i++)
{
int Min = INF;
int k = ;
for( j = ; j <= n ;j++)
{
if(!p[j]&&dist[j]<Min)
{
Min = dist[j];
k = j;
}
}
if(Min==INF) return ;
p[k] = true;
for(j = ; j <= n ;j++)
{
if(!p[j]&&mp[k][j]!=INF&&dist[j]>dist[k]+mp[k][j])
dist[j] = dist[k]+mp[k][j];
}
}
}
..............用链表存.................
1 struct Edge{
int to;
int v ;
int next;
}edge[M];
int Enct;
int head[N];
void add(int from ,int to , int v )
{
edge[Enct].to = to ;
edge[Enct].v = v ;
edge[Enct].next = head[from];
head[from] = Enct++; edge[Enct].to = from ;
edge[Enct].v = v ;
edge[Enct].next = head[to];
head[to] = Enct++;
}
void init ()
{
Enct = ;
memset(head,-, sizeof(head));
}
int dist[N];
bool p[N];
void dijk(int s, int n)
{
int i , j , k ;
for( i = ; i <= n ; i++ )
{
p[i] = false;
dist[i]= INF;
}
p[s] = true;
dist[s] = ;
for( i = head[s] ; i != - ; i = edge[i].next)
{
Edge e = edge[i];
if(e.v<dist[e.to])//考虑重边
dist[e.to] = e.v;
}
for( i = ;i < n ;i++)
{
int Min = INF;
int k = ;
for( j = ; j <= n ; j++)
{
if(!p[j]&&dist[j]<Min)
{
Min = dist[j];
k = j;
}
}
p[k] = true;
if(Min == INF) return ;
for( j = head[k] ;j!=- ;j=edge[j].next)
{
Edge e = edge[j];
if(!p[e.to]&&dist[e.to]>dist[k]+e.v)
{
dist[e.to] = dist[k]+e.v;
}
}
}
}
dijk算法思路
贪心的思想,需要一个vis数组标记这个点是否被加入过队列中,一个dis 数组,储存当前值到起始点的当前最短距离,开始所有点的dis都标记成INF,第一个点的dis 标记成0 ,扫描n次,每次都找出未加入队列的点中距离起始点最近的一个点,标记为访问过,用这个点去更新与其相连的点的到 初始点的距离,这个算法不能求负权图,不能判环。
dijk的更多相关文章
- [bzoj2118]墨墨的等式【dijk+堆】
10/30的update:如果是冲着dijk的板子来的,建议看多校联考contest中第二场day2的T2,那边的写法比较优秀... --------------------------------- ...
- 【CodeForces 602C】H - Approximating a Constant Range(dijk)
Description through n) and m bidirectional railways. There is also an absurdly simple road network — ...
- poj3114Countries in War(缩点+DIJK)
http://poj.org/problem?id=3114 缩点+DIJK 注意缩点之后有重边啊 floyd会TLE #include <iostream> #include<cs ...
- poj 1062 昂贵的聘礼(最短路 dijk+枚举)
终于A 了,这题做着真麻烦 题目:http://poj.org/problem?id=1062 dijk 一般用于正权有向图 此题的关键在于等级限制的处理,最好的办法是采用枚举,即假设酋长等级为5,等 ...
- 学习dijk最短路径中
#include<iostream> #include<math.h> #include<stdio.h> #include<algorithm> #i ...
- 最短路<dijk>
题意: 有n个城市,有m条路,给出每条路的出发和结束的城市及长度,求从第一个城市到最后一个城市的最短路.按格式输出. power oj 2443 题解: 标准dijk算法. #include<c ...
- Saving James Bond(dijk)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1245 Saving James Bond Time Limit: 6000/3000 MS (Java ...
- Choose the best route(最短路)dijk
http://acm.hdu.edu.cn/showproblem.php?pid=2680 Choose the best route Time Limit: 2000/1000 MS (Java/ ...
- Dijk入门(杭电2544题)
#include<iostream> #include<cstring> using namespace std; #define INF 0x3f3f3f3f int n,m ...
随机推荐
- [array] leetcode - 33. Search in Rotated Sorted Array - Medium
leetcode - 33. Search in Rotated Sorted Array - Medium descrition Suppose an array sorted in ascendi ...
- rpm 命令详解
参考:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/10/08/2203153.html rpm是由红帽公司开发的软件包管理方式,使用r ...
- K:枚举的线程安全性及其序列化问题
枚举是如何保证线程安全的且其在序列化和反序列化的操作中是单例的? 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关 ...
- lastIndex对正则结果的影响
前言 今天遇到一个问题,用正则表达式去检查同一个字符串时,交替返回true和false.无奈之下,重新翻了翻权威指南,发现罪魁祸首原来是lastIndex.可在控制台尝试下 let reg = /[\ ...
- 基于zepto的移动端日期和时间选择控件
前段时间给大家分享过一个基于jQuery Mobile的移动端日期时间拾取器,大家反应其由于加载过大的插件导致影响调用速度.那么今天我把从网络上搜集到的两个适合移动端应用的日期和时间选择插件分享给大家 ...
- 为Python添加中文关键字
狗屎咖啡 2 个月前 原址: https://zhuanlan.zhihu.com/p/31159526 swizl/cnpython 1. 大部分语法,可以按下面方法加同义的中文token第1步. ...
- 深入浅出Android之学习笔记
1.查看启动log [2011-01-11 14:44:21 - BMI] Android Launch! [2011-01-11 14:44:21 - BMI] adb is running nor ...
- javascript中name,value等属于保留字
前几天在练习js代码的时候,碰到了一个坑,这是让人醉了. html代码如下: <div> <div> <!--输入 123456--> <lable>请 ...
- java多线程(八)-死锁问题和java多线程总结
为了防止对共享受限资源的争夺,我们可以通过synchronized等方式来加锁,这个时候该线程就处于阻塞状态,设想这样一种情况,线程A等着线程B完成后才能执行,而线程B又等着线程C,而线程C又等着线程 ...
- spring boot 之fastJson的使用(二)
昨天说了springboot的简单入门程序.今天进一步深入.今天说一下,fastJson的使用.做过springmvc的都知道fastjson.其实boot自带json可是本人用惯了fastjson, ...