DFS、BFS的定义及C语言算法实现请参照
连通图遍历策略之深度优先搜索(C语言)
连通图遍历策略之广度优先搜索(C语言)


为了便于理解这里的数据是一个无向图,要求输出遍历顺序

下面只给出用例和算法,之后可以根据后面的三个题目进行深入学习
Input:
5 5
1 2
1 3
1 5
2 4
3 5
Output:
1 2 4 3 5

DFS

import java.util.Scanner;public class DFS {static int[][] e = new int[100][100];static int[] book = new int[100];static int n, m;static int sum = 0;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();e[a][b] = 1;e[b][a] = 1;}book[1] = 1;dfs(1);}public static void dfs(int cur) {System.out.print(cur + " ");sum++;if (sum == n) {return;}for (int i = 1; i <= n; i++) {if (e[cur][i] == 1 && book[i] == 0) {book[i] = 1;dfs(i);}}return;}
}

BFS


import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;public class BFS {static int[][] e = new int[100][100];static int[] book = new int[100];static int n, m;static Queue<Integer> queue = new LinkedList<>();static Scanner input = new Scanner(System.in);public static void main(String[] args) {int a, b;n = input.nextInt();m = input.nextInt();for (int i = 0; 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++) {a = input.nextInt();b = input.nextInt();e[a][b] = 1;e[b][a] = 1;}queue.offer(1);book[1] = 1;bfs();}public static void bfs() {while (!queue.isEmpty()) {int cur = queue.peek();for (int i = 1; i <= n; i++) {if (e[cur][i] == 1 && book[i] == 0) {book[i] = 1;queue.offer(i);}}System.out.print(queue.remove() + " ");}return;}
}

下面是一个全排列的简单题目,也用到了dfs,属于偏简单的一道题目,用来给后面的题目做铺垫

问题描述:假设有编号为1、2、3的三张卡片和编号1、2、3的三个盒子,现需将这三张扑克牌分别放到三个盒子里面,并且每个盒子只能放一张扑克牌,请问一共有几种不同的方法?
Output:
123 132 213 231 312 321

import java.util.Scanner;
/*** DFS算法基本模型:* void dfs(int step) {*     判断边界*     尝试每一种可能 for {*         继续下一步def(step + 1)*     }*     返回* }* */public class DFS {static int n;static int[] book = new int[10];static int[] a = new  int[10];public static void main(String[] args) {Scanner input = new Scanner(System.in);n = input.nextInt();dfs(1);}public static void dfs(int step) {if (step == n + 1) {/*** 打印,并返回* */for (int i = 1; i <= n; i++) {System.out.print(a[i] + " ");}System.out.println();return;}for (int i = 0; i < n; i++) {/*** 标记数组book,用来检测盒子中是否已经放入* */if (book[i] == 0) {/*** 将i号扑克牌放入到第step个盒子中* */a[step] = i;book[i] = 1;/*** 处理step+1个小盒子,注意要记得将刚才尝试的扑克牌收回* */dfs(step + 1);book[i] = 0;}}return;}}

搜素算法(基础)--DFS/BFS算法(JAVA)相关推荐

  1. 算法基础:排序算法之冒泡排序

    算法基础:排序算法之冒泡排序 实现:数列有序排序 思想:已知一个数列,令数列中相邻的两个元素一一做比较,按照小大的顺序(或从大到小的顺序),如果前一个数比后一个数大(或后一个数比前一个数大),则互换( ...

  2. 《算法基础:打开算法之门》一1.5 拓展阅读

    本节书摘来自华章出版社<算法基础:打开算法之门>一书中的第1章,第1.5节,作者 [美]托马斯 H 科尔曼(Thomas H Cormen),更多章节内容可以访问云栖社区"华章 ...

  3. 搜素专题(DFS )

    搜素专题(DFS ) 前言 搜素是一种暴力的方法可以按照树去理解在不剪支的情况下,可以把所有 *方案* "枚举"出来剪支 --> 在确定一定不会是解的情况下,提前终止该&qu ...

  4. GIS算法基础——左转算法拓扑生成

    GIS基础算法目录 GIS算法基础--左转算法拓扑生成 GIS算法基础--矢量数据压缩道格拉斯普克压缩算法(非递归实现) GIS算法基础--左转算法拓扑生成 GIS基础算法目录 基于JavaScrip ...

  5. python 拓扑排序 dfs bfs_图遍历算法之DFS/BFS

    在计算机科学, 图遍历(Tree Traversal,也称图搜索)是一系列图搜索的算法, 是单次访问树结构类型数据(tree data structure)中每个节点以便检查或更新的一系列机制.图遍历 ...

  6. 自动寻路算法C语言,bfs算法(c语言贪吃蛇自动寻路算法)

    广度优先法(BFS)算法C/C++代码,要说明和图解!谢谢! #include #define MAX 10 int front=-1,rear=-1; struct node { int value ...

  7. 算法设计与分析(电子科技大学)(上)算法基础和贪心算法

    算法分析与设计 引论 (1)理解算法和程序的差别 (2)理解判断问题和优化问题这两类计算问题 1.理解指数增长的规模 2.理解渐进表达式 掌握渐进符号Ο.Θ.Ω的含义,能判断一个函数属于哪个渐近增长阶 ...

  8. 沈孝钧计算机算法基础答案,计算机算法基础教学课件ppt作者沈孝钧第12章-PPT-N2课件.pptx...

    计算机算法基础教学课件ppt作者沈孝钧第12章-PPT-N2课件.pptx 第 12 章计算几何基础计算几何(Computational Geometry)是计算机算法的一个重要分支,它要解决的是如何 ...

  9. 沈孝钧计算机算法基础答案,计算机算法基础教学课件ppt作者沈孝钧第14章-PPT-N2课件.pptx...

    计算机算法基础教学课件ppt作者沈孝钧第14章-PPT-N2课件.pptx 第 14 章NP-完全问题讨论问题的复杂性.根据其难易程度把问题分类.如果一个问题有多项式的算法,则称为可驾驭的(tract ...

最新文章

  1. 刷墙(左蓝右红或同一色)
  2. 稳压源GWINSTEKGPD3303系列控制软件
  3. Hi3516ampp编译错误之ls: cannot access '/hiwork/osdrvhi3516a.C02': No such file or directory
  4. 扩增子图表解读8网络图:节点OTU或类Venn比较
  5. FLASH基础概念 [一]
  6. 晴天php下载,x.php · 一步晴天/smart - Gitee.com
  7. 我可以编写一个CSS选择器来选择不具有某个类或属性的元素吗?
  8. Wondershare DVD Creator mac版如何刻录光盘文件
  9. ip-sysctl.txt 文件
  10. 从0开始学习C#第二天
  11. Unity3D 2018安装教程
  12. 从零开始学习编程01
  13. 背后实力大比拼 探秘七大IT巨头实验室
  14. 2022城通网盘仿蓝奏云修复版源码
  15. requestAnimationFrame运动框架实现-果冻效果
  16. 爬虫练习三:爬取链家二手房信息
  17. exlsx中定义名称步骤_excel定义名称详解
  18. RNN中BPTT的推导和可能的问题
  19. BZOJ1616: [Usaco2008 Mar]Cow Travelling游荡的奶牛
  20. 微信小程序授权_微信小程序授权验证码什么意思

热门文章

  1. jq点击事件多次响应_Jquery中on绑定事件 点击一次 执行多次 的解决办法
  2. 《springcloud超级入门》Spring Cloud是什么?Spring Cloud版本介绍《二》
  3. hp服务器装xp系统,教你惠普笔记本一键装xp系统的方法
  4. 正在从“vetur”获取代码操作_长时间运行 io.Reader 和 io.Writer 操作测算进度和估算剩余时间...
  5. 数据增强_imgaug图像数据增强必备工具
  6. json里面的list数据取不出来_sql盲注的困局:利用DNSlog快速导出数据
  7. 计算机应用技木就业前京,计算机专业毕业的研究生在京就业情况及启示.doc
  8. matlab 绘制符号函数,DAY8 MATLAB学习笔记—simulink入门、MATLAB符号函数的图形绘制...
  9. 144显示器只有60_你知道显示器60Hz和144Hz的刷新率差别有多大吗?你没有用过吗?...
  10. 基础功能4-画loss