最短路径–城市路径问题:

问题描述:求从1号城市到5号城市的最短路径长度

Input:
5 8
1 2 2
1 5 10
2 3 3
2 5 7
3 1 4
3 4 4
4 5 5
5 3 3
Output:
9

DFS

import java.util.Scanner;
public class minPath {static int min = 99999999;static int[][] e = new int[100][100];static int[] book = new int[100];static int n, m;static Scanner input = new Scanner(System.in);public static void main(String[] args) {n = input.nextInt();m = input.nextInt();for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {if (i == j) {e[i][j] = 0;} else {e[i][j] = 99999999;}}}for (int i = 1; i <= m; i++) {int a = input.nextInt();int b = input.nextInt();int c = input.nextInt();e[a][b] = c;}book[1] = 1;dfs(1, 0);System.out.println(min);}public static void dfs(int cur, int dis) {/*** 如果当前路径大于之前找到的最小值,可直接返回* */if (dis > min) {return;}/*** 判断是否达到最后一个结点,更新最小值,返回* */if(cur == n) {if (dis < min) {min = dis;return;}}/*** 当前点到其他各点之间可连通但是还未添加进来时,遍历执行* */for (int i = 1; i <= n; i++) {if (e[cur][i] != 99999999 && book[i] == 0) {book[i] = 1;dfs(i, dis+e[cur][i]);/*** 回溯**/book[i] = 0;}}return;}
}

最短路径–转乘问题:

问题描述:求从1号城市到5号城市的最短路径长度
Input:
5 7 1 5
1 2
1 3
2 3
2 4
3 4
3 5
4 5
Output:
2

这个题目与上一个的区别就在于,这些路径是没有权值的,也就是说只需要找出到达一个点的最短距离就可以了,记录次数即可。

BFS

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;class node {int x;int s;node(int x, int s) {this.x = x;this.s = s;}
}public class minPath {static int[][] e = new int[51][51];static int[] book = new int[51];static int n, m;static int start, end;static int mark, sum;static Queue<node> queue = new LinkedList<>();static Scanner input = new Scanner(System.in);public static void main(String[] args) {n = input.nextInt();m = input.nextInt();start = input.nextInt();end = input.nextInt();for (int i = 1; i <= n; i++) {for (int j = 0; j <= m; j++) {if (i == j) {e[i][j] = 0;} else {e[i][j] = 99999999;}}}for (int i = 1; i <= m; i++) {int a = input.nextInt();int b = input.nextInt();e[a][b] = 1;e[b][a] = 1;}queue.offer(new node(start, 0));book[1] = start;bfs();System.out.println(sum);}public static void bfs() {int flag = 0;while (!queue.isEmpty()) {int cur = queue.peek().x;for (int i = 1; i <= n; i++) {if(e[cur][i] != 99999999 && book[i] == 0) {mark = i;sum = queue.peek().s + 1;queue.offer(new node(i, sum));book[i] = 1;}if(mark == end) {flag = 1;break;}}if(flag == 1) {break;}queue.remove();}return;}
}

基本上能用深度优先的问题都可以用广度优先,但是广度优先更适合无向图,或者说所有边的权值一样的情况,大家可以通过多做题灵活使用这两种方法

图论算法(一)--最短路径的DFS/BFS解法(JAVA )相关推荐

  1. 图论算法之最短路径(Dijkstra、Floyd、Bellman-ford和SPFA)

    图论算法之最短路径(Dijkstra.Floyd.Bellman-ford和SPFA) 1.图论最短路径概述 图论算法为了求解一个顶点到另一个顶点的最短路径,即如果从图中某一顶点(称为源点)到达另一顶 ...

  2. 搜素算法(基础)--DFS/BFS算法(JAVA)

    DFS.BFS的定义及C语言算法实现请参照 连通图遍历策略之深度优先搜索(C语言) 连通图遍历策略之广度优先搜索(C语言) 为了便于理解这里的数据是一个无向图,要求输出遍历顺序 下面只给出用例和算法, ...

  3. 【图论算法】最短路径算法(无权最短路径、Dijkstra算法、带负边值的图、无圈图)

    本篇博客将考察各种最短路径问题.     无权最短路径     Dijkstra 算法     具有负边值的图     无圈图     所有顶点对间的最短路径     最短路径的例子–词梯游戏 输入是 ...

  4. LeetCode算法题13:DFS/BFS - 单词搜索

    文章目录 单词搜索 DFS : 小小的优化 总结 单词搜索 题目链接:https://leetcode-cn.com/problems/word-search/ 题目描述: 给定一个 m x n 二维 ...

  5. [AcWing算法刷题]之DFS+BFS迷宫模板(简单)

    题目来源: 题库 - AcWing 目录 DFS和BFS模板题目:迷宫类 机器人的运动范围​ 字母 迷宫 红与黑 棋盘问题 马走日 全球变暖 DFS综合类 乘积最大(提高课) 单词接龙(提高课) 取石 ...

  6. 数学建模十大算法04—图论算法(最短路径、最小生成树、最大流问题、二分图)

    文章目录 一.最短路径问题 1.1 两个指定顶点之间的最短路径 1.1.1 Dijkstra算法 1.1.2 Matlab函数 1.2 每对顶点之间的最短路径 1.2.1 Dijkstra算法 1.2 ...

  7. 算法题目——省份数量(dfs,bfs)

    题目链接:leetcode.547省份数量 dfs: 深度优先遍历:递归 思路:读入数据完成后 重点:建立一个数组记录该省份是否访问,新建一个元素记录省份圈的个数 1.对所有省份循环一次,如果该省份未 ...

  8. Algorithm:C++语言实现之图论算法相关(图搜索广度优先BFS、深度优先DFS,最短路径SPF、带负权的最短路径Bellman-ford、拓扑排序)

    Algorithm:C++语言实现之图论算法相关(图搜索广度优先BFS.深度优先DFS,最短路径SPF.带负权的最短路径Bellman-ford.拓扑排序) 目录 一.图的搜索 1.BFS (Brea ...

  9. 图论算法(二)-最短路径的Dijkstra [ 单源 ] 和Floyd[ 多源 ] 解法(JAVA )

    一.Dijkstra算法 问题描述:求一个点到任意个点的距离 思路:单源最短路径问题,使用Dijkstra算法 Input: 6 9 1 2 1 1 3 12 2 3 9 2 4 3 3 5 5 4 ...

最新文章

  1. 网络流FF,EK,dinicm, isap算法板子//带注释
  2. 最长子序列和 动态规划python_算法基础之python实现动态规划中数字三角形和最长上升子序列问题...
  3. RHEL6网络相关配置
  4. 测试服务搭建之centos7下安装java
  5. 关于激励函数的一些思考
  6. PMP之敏捷图表之产品地图VS产品路线图
  7. FPGA阻塞赋值与非阻塞赋值用法
  8. 圣诞海报模板|给设计师点灵感
  9. VS2019,C#打包发布生成单个exe
  10. 思科CEO自爆:G20虚拟会议用的我家技术
  11. 单片机上面的继电器工作原理及其作用
  12. C语言——数组定义及使用
  13. Longhorn 企业级云原生分布式容器存储-券(Volume)和节点(Node)
  14. Gameplay - 设计使命召唤类型的关卡
  15. Java-IO-字符流
  16. libusb android pc,libusb: android上集成libusb库
  17. 做过SEO优化的网站与普通站的区别在哪里
  18. matlab wolfe准则,[原创]用“人话”解释不精确线搜索中的Armijo-Goldstein准则及Wolfe-Powell准则...
  19. PID的理解与实现(二)
  20. 小清丽微距花卉拍摄示范

热门文章

  1. java中execquery(),javaee登录界面
  2. 如何把项目改成微服务项目_【日记】148微服务项目第18天
  3. mysql column legnth too big for_Column length too big for column 'Flist' (max = 21845);
  4. php代理m3u8,PHP实现m3u8并发下载
  5. php如何统计数组的个数,如何用php统计数组元素的个数(附代码)
  6. 东莞市商业学校计算机平面设计在哪个校区,东莞市商业学校
  7. python内置对象是什么_#【Python】【基础知识】【内置对象常用方法】
  8. HTML5学习笔记(二)
  9. hive 十六进制转十进制_hive 常用运算
  10. arm汇编指令集_1. 从0开始学ARM安装Keil MDK uVision集成开发环境