用于求最优解、一组解、求全部解这类问题

从问题的某一种可能出发,搜索从这种情况出发所能达到的所有可能,如果有路可以走下去,就走到下一个状态,继续按照这种规则搜索;当这条路走到“尽头”而没有达到目标状态的时候,在倒回上一个出发点,从另一个可能出发,继续搜索,直到达到目标状态。

回溯与递归的区别

递归是一种算法结构,递归会出现在子程序中自己调用自己或间接地自己调用自己。

回溯是一种算法思想, 从问题的某一种可能出发, 搜索从这种情况出发所能达到的所有可能, 当这一条路走到” 尽头 “的时候, 再倒回出发点, 从另一个可能出发, 继续搜索. 这种不断” 回溯 “寻找解的方法。
通俗点讲回溯就是一种试探,类似于穷举,但回溯有“剪枝”功能,比如求和问题。给定7个数字,1 2 3 4 5 6 7求和等于7的组合,从小到大搜索,选择1+2+3+4 =10>7,已经超过了7,之后的5 6 7就没必要在继续了,这就是一种搜索过程的优化。

原文链接

走迷宫问题

给一迷宫表个和入口位置,找出并打印出从入口到出口的路径

public class Zoumigong {public static void main(String[] args) {//小球从(1,1)出发,到达(6,5)结束//值为0表示没走过,值为2表示通路,值为3表示走过(测试过),但是不通//在走迷宫时,尝试方向 下右上左,走不通,则回溯int[][] map=new int[8][7];migong(map);for (int[] ints : map) {for (int anInt : ints) {System.out.print(" "+anInt);}System.out.println();}setWay(map,1,1);System.out.println("走出之后的");for (int[] ints : map) {for (int anInt : ints) {System.out.print(" "+anInt);}System.out.println();}}//生成地图public static void migong(int[][] map){//用1当墙for (int i = 0; i < 7; i++) {map[0][i]=1;map[7][i]=1;}for (int i = 0; i < 8; i++) {map[i][6]=1;map[i][0]=1;}//设置挡板map[3][1]=1;map[3][2]=1;}//寻求出路 下右上左public  static boolean setWay(int[][] map,int i,int j){if (map[6][5]==2){//找到出路return true;}else {if(map[i][j]==0){map[i][j]=2;//假设为通路上一点//按照下右上左开始尝试if (setWay(map, i+1,j)){return true;}else if (setWay(map, i,j+1)){return true;}else if (setWay(map, i-1,j)){return true;}else if (setWay(map, i,j-1)){return true;}else{//说明该点不通map[i][j]=3;return false;}}else {//该点为1,2,3return false;}}}
}

八皇后问题
8x8的棋盘 有八个皇后 要求任意两个皇后都不能处于同一行,同一列或同一斜线上,有多少种解法

//8x8的棋盘 有八个皇后 要求任意两个皇后都不能处于同一行,同一列或同一斜线上(92种结果,判断15720次)
// 使用一维数组:arr[i]=val  表示第i+1个皇后要放在第i+1行的第val+1列,
public class bahuanghou {public static void main(String[] args) {Queue8 queue8 = new Queue8();queue8.check(0);System.out.println(queue8.count);System.out.println(queue8.panduancount);}
}
class Queue8{int max=8;int[] array=new int[max];int count=0;int panduancount=0;//check每一次递归时,都有八次循环,循环结束,回溯到上层public void check(int n){//放置第n个皇后if(n==max){//8个都放置完毕print();return;}//for (int i = 0; i < max; i++) {array[n]=i;if(panduan(n)){//判断位置是否冲突check(n+1);//摆放下一个}//冲突就进入下一次循环,相当于把列后移了一次}}public  boolean panduan(int n){//n为第n个皇后panduancount++;for (int i = 0; i < n; i++) {//i,n不同 皇后不可能同行//不同列+不同斜线(y=x;y=-x)if(array[i]==array[n]||(Math.abs(array[i]-array[n])==Math.abs(i-n))) {return false ;}}return true;}public void print(){count++;System.out.println(Arrays.toString(array));System.out.println();}
}

JAVA 算法 回溯相关推荐

  1. java实现回溯算法,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  2. JAVA算法:走迷宫回溯算法设计(JAVA版本)

    JAVA算法:走迷宫回溯算法设计(JAVA版本) 迷宫数组 int[][] maze = {                 {0, 1, 0, 0, 0},                 {0, ...

  3. Java实现回溯算法中的装载问题---(详细)

    回溯算法中的装载问题-Java (超详细) 回溯算法之装载问题 回溯算法中的装载问题-Java (超详细) 前言 一.如何实现回溯法? 二.具体事例: 装载问题的解决 1. 问题描述: 2.如何解决装 ...

  4. 回溯java算法_聊聊算法——回溯算法

    "递归只应天上有,迭代还须在人间",从这句话我们可以看出递归的精妙,确实厉害,递归是将问题规模逐渐减小, 然后再反推回去,但本质上是从最小的规模开始,直到目标值,思想就是数学归纳法 ...

  5. java 符号三角形_算法java实现--回溯法--符号三角形问题

    符号三角形问题的java实现(回溯法) 具体问题描述以及C/C++实现参见网址 http://blog.csdn.net/liufeng_king/article/details/8764319 /* ...

  6. JAVA算法:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合(JAVA)

    JAVA算法:给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合(JAVA) 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合.. 当 n = 4 ...

  7. 【Java算法之dfs 与bfs详解】

    下次再也不鸽了(つಥ㉨ಥ)つ 我发誓,真的!!! Java算法之dfs 与bfs 1. dfs 1.1 dfs递归 2. bfs 1. bfs常见两类问题 1.1==是否==有路径问题 1.2最短路径 ...

  8. java算法----排序----(6)希尔排序(最小增量排序)

    1 package log; 2 3 public class Test4 { 4 5 /** 6 * java算法---希尔排序(最小增量排序) 7 * 8 * @param args 9 */ 1 ...

  9. 希尔排序的java算法_Java算法系列篇 【希尔排序】

    什么? 搞Java不会算法? 由于个人兴趣原因以及工作所需,最近了解Java算法的相关案例 及时分享 感兴趣的欢迎交流 希尔排序 描述: 基本思想:先将整个待排序的记录序列分割成为若干子序列分别进行直 ...

  10. 1.1.10 从二分查找BinarySearch开启算法学习之路---《java算法第四版》

    文章目录 0.前言 1.功能 2.示例 有两个名单tinyW.txt和tinyT.txt,将tinyT.txt名单中不在tinyW.txt的数据打印出来 ① 实现原理 ② 实现代码 ③ 性能分析 0. ...

最新文章

  1. linux apr文件解压失败,Linux安装apache服务器遇到的问题
  2. 乡村振兴谋定齐鲁样板-农业大健康·周荣江:国情讲坛创新
  3. Xcode9 新功能
  4. 快手新作品监控提醒助手,可无水印下载视频和封面
  5. Mcafee VirusScan系列
  6. Multi-Similarity Loss with General Pair Weighting for Deep Metric Learning 阅读笔记
  7. 如何统计钣金文档中向上和向下折弯的个数
  8. 微信小程序:map地图自动缩放自适应大小
  9. 面试官:SPA(单页应用)首屏加载速度慢怎么解决?
  10. 【雷达与对抗】【2017.06】空中目标的无源雷达探测
  11. 设计师必备!超好用的MAC电脑网页设计师软件
  12. metaWRAP bin_refine 模块如何优化分箱结果
  13. 全军尽墨的Android应用:社会化授权登录及分享安全漏洞
  14. Deepdive 教程--数据准备
  15. 形参和实参的定义和区别
  16. 无服务器计算:云计算的下一阶段
  17. MacBook杀毒软件CleanMyMac X4.13
  18. 那些在2009年失意的互联网“伟人”
  19. TL138-EVM U-Boot启动方法及启动参数详解
  20. TFC 2017 腾讯Web前端大会 全场笔记

热门文章

  1. Latex下划线问题
  2. 7、什么是三极管(PNP与NPN型)恒流源电路(放电电路与充电电路)
  3. 华为虚拟化usb服务器,华为FusionComputer服务器虚拟化完美解决方案
  4. element环境插件
  5. 真假iPhone5s的辨别方法,苹果5改5s,iPhone5 改 iPhone5s 识别方法
  6. OpenDaylight-Boron学习笔记: 6 VTN模块
  7. 用idea使用struts和hibernate来实现CRUB的操作
  8. 【数学】立体角,积分求球的表面积、体积
  9. 3D打印了这个杜邦线理线神器,从此桌面再也不乱了
  10. c-lodop打印网页内容