数据结构之单源最短路径(迪杰斯特拉算法)-(九)
最开始接触最短路径是在数据结构中图的那个章节中。运用到实际中就是我在大三参加的一次美赛中,解决中国的水资源问题。所谓单源最短路径,就是一个起点到图中其他节点的最短路径,这是一个贪心算法。
迪杰斯特拉算法原理(百科):
public class Graph{public static void main(String[] args){// TODO Auto-generated method stubint [][]distance=new int[7][7];distance[0][1]=2;distance[0][3]=1;distance[1][3]=3;distance[1][4]=10;distance[2][0]=4;distance[2][5]=5;distance[3][2]=2;distance[3][4]=2;distance[3][5]=8;distance[3][6]=4;distance[4][6]=6;distance[6][5]=1;int []p=new int[distance.length];int []d=getMinDistance(0, distance,p);for(int i=1;i<d.length;i++){System.out.println("the distance from 1 to "+(i+1)+":"+d[i]);int temp=i;System.out.print(temp+1+"<-");while(p[temp]!=0){System.out.print(p[temp]+1+"<-");temp=p[temp];}System.out.println("1");}}/** 迪杰斯特拉求单元最短路径* 原理:*//*** 谈心策略,起点到w的最短距离=min{dv+c(v,w),dw},dv是已知的到节点v的最短距离* @param start 要求的节点* @param distance 邻接矩阵 表示相邻顶点的距离* @param p 前置节点,到达该节点的前面节点* @return*/public static int[] getMinDistance(int start,int [][]distance,int []p){int []know=new int[distance.length];//起点到节点的距离是否已知int []d=new int[distance.length];//起点到各个顶点的距离/***********初始化距离*******************/for(int i=0;i<d.length;i++)//初始情况下距离起点当然是无穷大d[i]=Integer.MAX_VALUE;d[start]=0;/*************************************//****初始化know表示是否已知道最短距离********/for(int i=0;i<know.length;i++)know[i]=0;/*************************************//****初始化最短节点的前置节点********/for(int i=0;i<p.length;i++)p[i]=0;/*************************************/while(true){//所有的最短距离都已知道if(isAllKnow(know))break;//找到d中最小的并且know=0的元素int pos=0,i,min=Integer.MAX_VALUE;for(i=0;i<d.length;i++){if(min>d[i]&&know[i]==0){min=d[i];pos=i;}}know[pos]=1;/*************找到前置节点是pos的所有节点,更新距离***************/for(i=0;i<distance.length;i++){if(distance[pos][i]!=0){if(d[i]>d[pos]+distance[pos][i]){d[i]=d[pos]+distance[pos][i];p[i]=pos;}}}}return d;}private static boolean isAllKnow(int []array){for(int e:array){if(e==0)return false;}return true;}}
运行截图:
数据结构之单源最短路径(迪杰斯特拉算法)-(九)相关推荐
- c++ 单源最短路径-狄杰斯特拉算法
文章目录 源码 输出 狄杰斯特拉算法 适用范围:没有负权重的图, 可以有环,有向无向图均可 求解问题:单源最短路径 时间复杂度:V^2 源码 #include <iostream> #in ...
- >算法笔记-动态规划-最短路径迪杰斯特拉算法
算法笔记-动态规划-最短路径迪杰斯特拉算法 作者:星河滚烫兮 前言 图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者 ...
- 最短路径——迪杰斯特拉算法——图的数据结构
最短路径是在工程上经常用到的概念,在这里给出了从单源点到任意顶点的迪杰斯特拉算法. 先来看看基本概念: 用代码C语言实现如下: #include<string.h>#include< ...
- 最短路径迪杰斯特拉算法--邻接矩阵
一.算法介绍 迪杰斯特拉算法(解决单源最短路径) 基本思想:每次找到离源点(如1号节点)最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径. 基本步骤:1,设置标记数组bo ...
- 别说了,世界那么大我想去看看!(最短路径-迪杰斯特拉算法弗洛伊德算法)
前言: 一直想去外面的世界看看,中国城市那么多,那么美,怎么样才可以用最少的钱,最短的时间游遍我想去的城市呢?(我在做梦?不不不!迪杰斯特拉算法和弗洛伊德算法来了) 这两个算法有着广泛的用途 ...
- 校园导游系统(纯C语言实现)最短路径---迪杰斯特拉算法
西京学院导游系统 学习数据结构+C语言可实现 #include <stdio.h> #include <stdlib.h> #include <conio.h> # ...
- 最短路径迪杰斯特拉算法 c语言,Dijkstra第K最短路径算法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //运筹学之最短路径 #include #include #define M 99999 int main() { int G[100][100]; in ...
- java 点到点最短路径,迪杰斯特拉算法处理无向图中最短路径的(dijkstra)Java实现(指定两点,求最短距离及路径) | 学步园...
其实不是原创哈,我写不出来. 如何求图中V0到V5的最短路径呢? java实现的方式如下: 第一步,根据图来建立权值矩阵: int[][] W = { { 0, 1, 4, -1, -1 ...
- 图的最短路径--迪杰斯特拉算法 c语言
还是按照书上的例子: 完整代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #def ...
- L2-001 紧急救援 (25 分)最短路径 迪杰斯特拉算法
L2-001 紧急救援 题目 代码 题目 L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城 ...
最新文章
- 聊一聊跨域,Vue向Django请求数据的一些问题
- java 泛型反射_Java使用反射来获取泛型信息示例
- ASP.NET中实现大结果集分页研讨 转
- python标准库time_Python3标准库:time时钟时间
- Qt Creator导出QML
- 制作一个让客户满意的软件
- 绝地求生 android版支持蓝牙吗,《绝地求生》吃鸡必须要顶配吗?这些配置也能畅玩...
- C++ 虚函数表浅析
- Ubuntu下映射串口设备到docker
- Dockerfile 学习:Docker Alpine PHP 安装扩展
- 有限元分析简单实例之四杆结构(matlab)
- VC6.0下配置opengl
- 应用软件漏洞利用分布
- 台式计算机怎么安装无线网卡,台式机无线网卡怎么用 台式机USB无线网卡安装使用教程...
- 计算机系换届视频,计算机科学与技术系学生会换届方案
- 论文笔记——Thompson Sampling for Contextual Bandits with Linear Payoffs(线性收益)
- 法线贴图的实现【OpenGL】
- elementui级联选择器空children导致选择无法显示的问题
- LINUX NGINX 环境禁止访问指定后缀文件
- 神经网络应用实例 -- python