![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
回溯法
xuptly
三分天注定,七分靠打拼。爱拼才会赢。
展开
-
N后问题Java代码
回溯法:package HuiSu; public class Nhou { private int max = 5;// 现在假设是5个皇后 private int[] array = new int[max]; //用来保7存结果,第一个皇后放在array[0] public static void main(String[] args) { ...原创 2019-06-19 20:36:32 · 214 阅读 · 0 评论 -
迷宫问题(只输出一种路径)
问题分析:迷宫问题,当只需要求得一种可以走的路径时,我们用的是递归加贪心算法。贪心算法:只保证当前最优,每次选择的都是当前路径中下一步最优的走就ok,它不会去考虑会对后面产生什么影响。所以,贪心算法不一定能得到最优解。回溯算法:回溯大体上看上去就是穷举,它可以的到这个问题的所有可能的结果,然后从结果中挑选一个最优的解,所以一定会得到最优解。但是它比穷举多了剪枝函数(把不可行结点,通过约...原创 2019-08-09 20:00:15 · 624 阅读 · 0 评论 -
迷宫问题(回溯法)
问题:给定一个入口,一个出口,找出从入口到出口的所有路径。图例:其中: // 代表墙 入口:(1,1) 出口:(7,8)分析:1. 中间格子有4种走法:东、南、西、北2. 但对于两边的格子,只有两种走法,为了普遍性,给其上下左右各加一行格子,作为墙。如图:红色区域。3. 走过的路需要标记,要不然会出现死循环,前一个格子走到下一个格子,而下一个格子其余三边都是墙...原创 2019-08-06 19:09:40 · 1359 阅读 · 0 评论 -
马踏棋盘(回溯法)
题目:编写一个演示国际象棋中马踏棋盘的程序。问题描述:将马随机放在国际象棋的8*8棋盘的某个方阵中,马按走棋规则(走“日”字)进行移动,要求每个方格只能进入一次,走遍棋盘上全部64个方格,求出马的行走路线,将数字1-64按照马走的顺序输出在8*8的方阵中。提示:由于可能性太大,如果把进入的地址随机,这样的程序跑起来跑个一天一夜估计也结束不了,可能会导致卡机。所以,下面的代码就是...原创 2019-08-06 12:36:36 · 2511 阅读 · 1 评论 -
旅行商问题 回溯法
问题描述:这个问题要求找出一条n个给定的城市间的最短路径,使我们在回到触发的城市之前,对每个城市都只访问一次。图解:解决方法:回溯法就是蛮力算法,把所有的可能性都试一次,从里面找出来最优解。这里用的是子集树。因为不能一个城市去多次,所以加一个城市的标记,初始值都是0,如果去过就变成1。代码:/* 回溯法(子集树) */ #include <...原创 2019-07-23 09:13:02 · 2887 阅读 · 1 评论 -
八皇后递归解法
题目的基本信息和基础,请先看上一篇八皇后非递归解法。 递归和非递归的区别: 1. 递归是让代码自动向下一层调用,回溯时回到之前的状态,所以这里就可以省略栈。2. 递归可以一次性得到所有解,每次第7行放置成功后,就输出,然后往下一格试探,直到本行都不能放,就回溯到上一行。这样直到第一行全部试探完,所有解也就输出了。 技巧: 回溯的条件改变总是根据递归调用的句子对称,具体看代码...原创 2019-08-04 15:41:05 · 166 阅读 · 0 评论 -
八皇后非递归解法
问题描述:在8*8的国际象棋棋盘上,现要放上8个皇后,要求所有皇后都不得在同一行、一列、一斜线上,输出所有可能的放法。方法:逐行试探,行就不用考虑了,只需要考虑每次放置时是不是有同列、同斜线的。因为如果按照行去排,给这行放一个就可以跳到下一行了。图:分析:1. 从0行开始,有8个格子,1个1个试探。(0,0)可以吗? 可以 break;2. 到第一行:(1,0)可以...原创 2019-08-04 14:42:24 · 1719 阅读 · 0 评论 -
装载问题 回溯法
1.问题描述:有一批共有 n 个集装箱要装上两艘载重量分别为 c1 和 c2 的轮船,其中集装箱 i 的重量为 w[i], 且重量之和小于(c1 + c2)。装载问题要求确定是否存在一个合理的装载方案可将这 n 个集装箱装上这两艘轮船。如果有,找出一种装载方案。例如,当n=3,c1=c2=50,且w=[10,40,40]时,可将集装箱1和集装箱2装上一艘轮船,而将集装箱3装在第二艘轮船;如果w...转载 2019-07-01 11:30:32 · 937 阅读 · 0 评论 -
N后问题
子集树解法:package HuiSu;public class Nhou2 { private int max = 5;// 现在假设是5个皇后 private int[] array = new int[max]; //用来保存结果,第一个皇后放在array[0] public static void main(String[] args) { ...原创 2019-07-01 16:54:23 · 85 阅读 · 0 评论 -
批处理作业调度问题 核心代码
题目描述:给定n个作业的集合J=(J1,J2,…,Jn)。每一个作业Ji都有两项任务分别是在2台机器上完成。每个作业必须先由机器1处理,然后再由机器2处理。作业Ji需要的处理事件时Tji,i=1,2,…n;j=1,2。例:考虑如下情况:作业 机器1 机器2作业1 2 1作业2 3 1作业3 2 3解...原创 2019-07-01 16:27:40 · 787 阅读 · 0 评论 -
最佳调度问题java代码实现
问题描述:假设有n个任务由k个可并行工作的机器完成。完成任务i需要的时间为ti。试设计一个算法使得完成这n个任务的时间最短。对任意给定的整数n和k,以及完成任务i需要的时间为ti,i=1~n。编程试设计这n个任务的最佳调度。输入:给出输入数据,第一行有2个正整数n和k。第2行的n个正整数是完成n个任务需要的时间。输出:将计算出的完成全部任务的最早时间输出。样例输入:...原创 2019-06-20 17:50:49 · 1459 阅读 · 0 评论 -
整数变换java代码
问题描述:关于整数i的变换f和g定义如下:f(n)=3*n;g(n)=[n/2];试设计一个算法,对于给定的两个整数n和m,用最少的f和g变换次数将n转化为m。算法设计:对任意给定的整数n和m,计算将整数n转换成m所需要的最少变换次数。数据输入:由文件input.txt给出输入数据。第一行有2个正整数n和m。结果输出:将计算的最少变换次数以及相应的变换序列输出到文件o...原创 2019-06-20 16:07:08 · 778 阅读 · 1 评论 -
装载问题
装载问题:有两艘船A,B。假设A的承重为C1, B的承重为C2输入:物品个数N,物品重量Wi。package HuiSu;import java.util.Scanner;/* * 装载问题:有两艘船A,B。假设A的承重为C1, B的承重为C2 * 输入:物品个数N,物品重量Wi。 * */public class ZHUANGZAI { public static int N...原创 2019-06-19 20:39:24 · 211 阅读 · 0 评论 -
哈夫曼编码(Huffman)数组
二:Huffman tree的构建(数组)前N个存储叶子的信息,后N-1个存储双亲结点的信息。结点类型:// 声明结点类型 typedef strct{ char word; // 存储字符 int weight; // 存储此字符出现的频率 int left; // 存储左子女下标 int right; // 存储右子女下标 int parent; // ...原创 2019-10-05 18:48:00 · 947 阅读 · 0 评论