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 ...
随机推荐
- 查找 GPU 计算能力
你能在这里找到你的 GPU 的计算能力: https://en.wikipedia.org/wiki/CUDA#Supported_GPUs
- Xamarin Android Fragment的两种加载方式
android Fragment的重点: 3.0版本后引入,即minSdk要大于11 Fragment需要嵌套在Activity中使用,当然也可以嵌套到另外一个Fragment中,但这个被嵌套的Fra ...
- 原创js自动补全---auotocomplete
if ($("input.autocomplete_input").length > 0) { $("input.autocomplete_input") ...
- 连接虚拟机mysql无法访问,报错编号1130的解决方法
新装一台虚拟机mysql的时候,往往会出现win无法连接的情况,报错信息1130,是因为没有权限的问题,解决方案如下: mysql -u root -p mysql>use mysql; mys ...
- How to setup a DL4J project with eclipse
https://electronsfree.blogspot.com/2016/10/how-to-setup-dl4j-project-with-eclipse.html
- 实现Windows程序的数据更新
枚举是一组描述性的名称定义一组有限的值,不包含方法对可能的值进行约束枚举是一组指定的常数,对可能的值进行约束枚举使用时直观方便.更易于维护 pictureBox控件属性名称 说明image ...
- 讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(中)- IOS不为人知的Bug
前言: 话说昨晚还是前晚,写了一篇:讲述Sagit.Framework解决:双向引用导致的IOS内存泄漏(上) 文章写到最后时,多了很多莫名奇妙的问题!!! 为了解决了这些莫名奇妙的问题,我又战斗了2 ...
- Head First设计模式之迭代器模式
一.定义 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示: 主要解决:不同的方式来遍历整个整合对象. 何时使用:遍历一个聚合对象. 如何解决:把在元素之间游走的责任交给迭代 ...
- spring boot RESTFul API拦截 以及Filter和interceptor 、Aspect区别
今天学习一下RESTFul api拦截 大概有三种方式 一.通过Filter这个大家很熟悉了吧,这是java规范的一个过滤器,他会拦截请求.在springboot中一般有两种配置方式. 这种过滤器拦截 ...
- CSS 鼠标样式大全
cursor是CSS中用于定义鼠标在元素标签上的显示样式,如常用的手型鼠标样式 cursor: pointer; 也可以通过url网址指定扩展名一般为.cur的鼠标图片文件. 名称 属性代码 描述 默 ...