Dijkstra 复习

Dijkstra 算法不仅是求图中最短路径的O(N²)算法

在关于图的动态规划中可以将题目转换为图,再用该算法进行DP

代码如下

#include<iostream>  // made by Huing
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int c[10001],f[1001][1001],n,m,s,t;
bool exist[10001],b[10001];
void Dijkstra(int s)
{
 memset(b,false,sizeof(b));
 b[s]=true;
 c[s]=0;
 for (int i=1;i<=n;i++) c[i]=f[s][i];//初始化
 
 for (int i=1;i<+n-1;i++)

{
  int k=0,minl=1e30;
  for (int j=1;j<=n;j++)
  if(!b[j]&&c[j]<minl){
   k=j;minl=c[j];
  }
  if(k==0) break;
  b[k]=true;
  for (int j=1;j<=n;j++)
  c[j]=min(c[j],c[k]+f[k][j]); 
 }
 cout<<c[t];
}
int main()
{
 cin>>n>>s>>t;                //求s到t的最短路径

memset(f,-0x7fffffff/3,sizeof(f));
    for (int i=1;i<=n;i++)
 for (int j=1;j<=n;j++)
 cin>>f[i][j];
 Dijkstra(s);
}

时间: 2024-09-06 10:32:48

Dijkstra 复习的相关文章

[算法第一轮复习] 最短路算法之dijkstra

1.算法描述 dijkstra,一种求单源正权图上的最短路的算法 主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止 Dijkstra算法思想为:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径 , 就将 加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示),按最短路径长度的递增次序依次把第二组的顶点加入S中.在加入的过程中,总保持从源

算法复习:最短路Dijkstra - Ford - Floyd

Dijkstra算法适用范围是单源最短路,有向图或者无向图,不能处理负权值 Floyd算法适用多源最短路,有向图或者无向图,可以处理负权值但是不能处理负权回路 Ford 算法多源最短路,可以处理负权值,能检测负权回路 Leetcode 743. 网络延迟时间 先用Dijkstra算法解,输入是vector要转存一下,另外找的是最后一个传播到的节点所用时间 #define max 999999 #define CLR(donser,value) memset(donser,value,sizeof

复习面向对象的OOA、OOD、OOP

复习 OOA.OOD.OOP OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,依照面向对象的思想来分析问题. OOA与结构化分析有较大的差别.OOA所强调的是在系统调查资料的基础上,针对OO方法所须要的素材进行的归类分析和整理.而不是对管理业务现状和方法的分析. OOA(面向对象的分析)模型由5个层次(主题层.对象类层.结构层.属性层和服务层)和5个活动(标识对象类.标识结构.定义主题.定义属性和定义服务)组成. 在这样

NOIP算法总结与复习

NOIP算法总结与复习 (看了看李总的蓝皮书,收获颇多,记下此文,以明志--) (一)数论 1.最大公约数,最小公倍数 2.筛法球素数 3.mod规律公式 4.排列组合数,错排 5.Catalan数 6.康托展开 7.负进制 8.中位数的应用 9.位运算 (二)高精度算法 1.朴素加法减法 2.亿进制加法减法 3.乘法 4.除法 5.亿进制读入处理 6.综合运用 (三)排序算法 1.冒泡 2.快排 3.堆排 4.归并 (四)DP 1.概念 2.解题步骤 3.背包类dp 4.线性dp 5.区间动态

复习啦。。

模板复习计划.图论:最短路:Dijkstra SPFA Floyed最小圈(*) 二维Dijkstra.SPFA倍增Floyed(*)最小生成树,各种生成树(里面有些还不会) 最小树形图二分图:各种概念,二分图最大权匹配(KM), HC算法(*)网络流:(把所有建模都看一遍,,,不管会不会的)费用流(最小/大费用最大流) ZKW费用流(*)最大流上下界网络流 动态规划:树型Dp(*).数位Dp决策单调性(*)插头DP斯坦纳树(*)记忆化搜索 字符串:后缀自动机.AC自动机.回文自动机,字符串 +

Dijkstra算法应用之Java实现

缘来是你: 前几天在博客园里,有小伙伴贴出华为2010年10K(薪资)员工3级晋级试题. 问题主要是算法实现. 在师兄大批入住华为的环境下,作为一名热爱算法的小伙伴,也想小试一下身手. 问题地址:http://www.cnblogs.com/preacher/p/4126261.html 在解决上述问题前先来复习一下基础知识: Dijkstra最短路径算法 上述问题放在下一期随笔上 算法简析: Dijkstra算法又称为单源最短路径,所谓单源是在一个有向图中,从一个顶点出发,求该顶点至所有可到达

zoj 1891 - 传说中的简答题 - 最短路径 - dijkstra

在复习资料中找到的对应不同类型的题目.想先从简单的题目入手,结果一上来就发现不对劲.感觉有点不简单呀. 之前也是碰到这种问题会畏首畏尾,因为,要计算两点之间的距离的.想着要不要先全部计算出来,放到数组里面分别调用. 但后来又想到不行,这样的时间复杂度更高了,n*(n+1)/2 的时间复杂度.就有点麻乱了. 通过参考网上其他的解答,发现他们也是一边算,一边找的.相比这就是简答题的优势吧. 然后题目的要求是求出最小花费的时间,这几天刚好在复习dijkstra算法.就可以用上了. 这里稍微总结一下:

算法复习计划

写在前面 随着四月的到来, 离省选越来越近了. 从NOIP到现在, 学到了很多很多东西, 有的学的比较深入, 有的只是略知一二 从明天开始, 进行针对省选的算法复习计划. 省选前完成. 重点是对算法的理解和应用, 还会注重模板习惯的养成 计划内容 1. 数据结构 一直觉得我数据结构学的还可以, 不过列出来发现会的也没多少. 少就少吧, 省选够用就行... 线段树 树状数组 并查集 哈希表 STL treap splay 树链剖分 主席树(可忽略) 字符串(KMP, 后缀数组) 2. 图论 掌握经

算法复习-研一上

算法复习  包含主题: 贪心算法 , 分治法,动态规划,回溯法,分支限界,线性规划 关键词:最优子结构 Q:贪心与动态规划中间的联系和区别 p93 后面总结 (背部问题,0-1背包问题) 递归分治算法 基本思想:将一个大的问题分成若干小的子问题问题,分而治之 一般步骤:1.分解将原问题分为若干规模小,相互独立与原问题形式相同的问题   2.求解,求解各个子问题,当问题被划分的足够小的时候,就能很容易求解     3.合并,将子问题逐层合并,得到最后的解 经典问题 二分搜索: 合并排序(将想要排序