Dijkstra模板

  • 再求单源最短路径时候,经常会用到Dijkstra算法,在某些数据量小的情况下bfs或者dfs或许可以得到结果,但是一旦结果大的时候常规搜索就很难在规定时间内得到答案。
  • Dijkstra基本思想:== 贪心==。Dijkstra其实就是一个在图论中的贪心算法。不过贪心的维度就是在预选点中的最短路径
  • Dijkstra算法的常规处理流程
    1:首先,Dijkstra处理的是带正权值的有向图,那么,就需要一个二维数组(如果空间大用list数组)存储各个点到达的权值大小。
    2:其次,还需要一个boolean数组判断那些点已经确定,int数组记录长度。那些点没有确定。每次确定的点需要标记,如果遇到已经确定的点就不该抛入队列进行比较。
    3:需要优先队列抛入已经确定点的周围点。每次抛出确定最短路径的那个并且确定,直到所有点确定为止。
  • 简单的概括流程为:
    :一般从选定点开始抛入优先队列。(路径一般为0),boolean标记0的位置,然后0周围的点抛入优先队列中(可能是node类),第一次就结束了
    :从队列中抛出距离最近的那个点(目前是0周围邻居)这个点一定是最近的(所有权值都是正的,点的距离只能越来越长。)标记这个点为true,并且将这个点的邻居加入队列,那么下次点一定在这个点的邻居和以前的点中产生。并且我们只能确定这个队列中只有一个最近点,因为有可能第二最近的就是被确定点的邻居。所以每次只能确定一个点,知道确定所有点。
    :重复二的操作,直到所有点都确定。

代码为:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StreamTokenizer;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;
//n 个定点 m条边的图
public class Main{static int leng[];public static void main(String[] args) throws IOException {// TODO 自动生成的方法存根StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out));in.nextToken();int n=(int)in.nval;in.nextToken();int m=(int)in.nval;int map[][]=new int[n][n];boolean bool[][]=new boolean[n][n];Listlist[]=new ArrayList[n];for(int i=0;i();}leng=new int[n];//记录长度boolean jud[]=new boolean[n];for(int i=1;iq1=new PriorityQueue<>(compare);q1.add(0);int count=0;while(!q1.isEmpty()){int x=q1.poll();if(count>=n) {break;}//所有点都确定if(!jud[x]){jud[x]=true;count ;for(int i=0;ileng[x] map[x][list[x].get(i)]){leng[list[x].get(i)]=leng[x] map[x][list[x].get(i)];                        }//System.out.println( no.leng map[no.x][i]);}}}}for(int i=1;icompare=new Comparator() {@Overridepublic int compare(Integer o1, Integer o2) {return leng[o1]-leng[o2];}
};static class node{int x;int leng;public node(int x,int leng){this.x=x;this.leng=leng;}}
}

Dijkstra模板(java)相关推荐

  1. P4779 【模板】单源最短路径(标准版)(dijkstra模板)

    dijkstra模板 输入: 4 6 1 1 2 2 2 3 2 2 4 1 1 3 5 3 4 3 1 4 4 输出: 0 2 4 3 堆优化版本 #include<bits/stdc++.h ...

  2. 【dijkstra模板】旅游规划 (25 分)

    立志用最少的代码做最高效的表达 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路费.现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径.如果有若干条 ...

  3. 最短路 dijkstra模板

    最短路 dijkstra模板 #pragma warning(disable:4996) #include<iostream> #include<string> #includ ...

  4. IO —— 下载模板java

    IO -- 下载模板java 一.业务前提 二.文件存放位置 三.JSP代码 四.下载功能的JS代码 五.下载功能的controller代码 六 导入文件 一.业务前提 下载模板,然后填写一些乘机人信 ...

  5. 从本地磁盘取出excel模板 java代码

    从本地磁盘取出excel模板 java代码 /*** Title: 导出资源预编模板Excel* @param session* @param response* @throws Exception* ...

  6. Dijkstra模板

    Dijkstra是求最短路径,从未选过点中找最短的一条路,然后更新其他点到起点的距离.例如选择的最短点为k,则dj[k]表示起点到k之间的距离,此时更新其他点到起点的距离,dj[j] = min(dj ...

  7. PAT甲级1131 Subway Map (30分):[C++题解]堆优化dijkstra、单源最短路、地铁地图、巧妙地建图套dijkstra模板!!

    文章目录 题目分析 题目链接 题目分析 原题: 来源:acwing 分析: 建图:所有能走到的点之间建立一条边,比如下面一条地铁线路有4站,它们是相通的,两两之间建一条边,边权是经过的站点数. 下面考 ...

  8. 牛客网 最短路 Floyd算法 Dijkstra算法 Java大数

    链接:https://www.nowcoder.com/questionTerminal/a29d0b5eb46b4b90bfa22aa98cf5ff17 来源:牛客网 最短路径 热度指数:2992 ...

  9. HDU 2544最短路dijkstra模板题

    最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

最新文章

  1. 构造函数没有返回值是怎么赋值的?
  2. java foreach 原理_一不小心就让Java开发者踩坑的failfast是个什么鬼?
  3. Socket(套字节)编程,客户端 服务器端的发送消息
  4. Arduino产生PWM的3种方法
  5. 帮助理解GAN的一些补充内容
  6. Ubuntu18.04.3虚拟机安装步骤图文教程
  7. C#刷遍Leetcode面试题系列连载(4): No.633 - 平方数之和
  8. 转:Socket在阻塞模式下的信息收发和文件接收
  9. 堪称奇迹!8 天诞生一个产品,这家创业公司做到了
  10. html5新增标记元素的内容类型,HTML5新标签与javaScript新方法
  11. ios java 通信_Kurento Java Spring Client IOS – Web到IOS通信
  12. linux weblogic java_options_linux系统启动weblogic受管服务器报unable to get file lock, will ret_daring的解决...
  13. 人生是什么?——感悟1:勇于承担自己的选择才是真正的勇气
  14. 量子计算机人类复活,死人有没有可能复活?从量子尺度来分析是有可能
  15. html如何插入下拉菜單,html下拉菜单怎么做?html下拉菜单的代码实例介绍
  16. IDEA插件(BindED)——查看class文件的十六进制
  17. 2023届暑期实习华为面试手撕题
  18. 解决cannot find -lopencv_dep_cudart问题
  19. java word创建表格_Java 在Word中创建表格
  20. VBA宏将带分隔符txt文件另存为xls格式

热门文章

  1. C++ Primer 5th笔记(6)chapter6 函数:参数匹配
  2. 关于Ubuntu20.04 sudo vi找不到命令解决方法
  3. Android fingerprint指纹/face人脸代码导读
  4. 使用 rsync / scp 命令下载linux文件,显示网速和进度
  5. 【Echarts】 绘制世界地图和中国省份
  6. 15、修改和删除触发器(DROP TRIGGER)
  7. n条线分平面问题解决方法总结
  8. MySQL中如何通过修改表实现约束的添加与删除
  9. RabbitMQ通配符模式
  10. Struts2的文件目录