Java机试题*:24点游戏算法(DFS:深度优先搜索)

java

描述

题目描述

给出4个1-10的数字,通过加减乘除运算,得到数字为24就算胜利,除法指实数除法运算,本题对数字选取顺序无要求,但每个数字仅允许使用一次,且不考虑括号运算

此题允许数字重复,如3 3 4 4为合法输入,但是每个数字只允许使用一次,如此处一共有两个3,则运算过程中两个3都被选取计算一次,所以3被调用运算两次,但是对应读入的两个数字

示例

 

知识点:搜索,DFS,回溯

import java.util.Scanner;

public class Main{

// 4个数字

public static int[] nums = new int[4];

// 4个数字对应的循环访问标识

public static boolean[] visited = new boolean[4];

// 是否有24点

public static boolean flag = false;

public static void main(String[] args){

Scanner sc = new Scanner(System.in);

while(sc.hasNextLine()) {

String[] strs = sc.nextLine().split(" ");

for (int i = 0; i < strs.length; i++) {

nums[i] = Integer.valueOf(strs[i]);

}

dfs(0, 0);

System.out.println(flag);

}

}

// 深度搜索" title="深度搜索">深度搜索

public static void dfs(int numIndex, double sum) {

// 终止条件: 数都已经参与计算完毕,则终止

if(numIndex == 4) {

// 若有某一组运算为24,则状态置为true

if(sum == 24) {

flag = true;

}

} else {

numIndex++;

/**

* 每个数,都要互相参与运算:7/2 、7-2不等于2/7、2-7,所以每次循环都需要再次重新全部计算。

* eg:7 2 1 10

* 循环4个数:第一次循环用7作为主数,与其它的数做加减乘除,这时需要将访问标识为已访问,

* 计算完,访问状态需要恢复为未访问状态。(用于下一次循环计算)

* 第二次循环用2作为主数,与其它的数做加减乘除

*/

for (int i = 0; i < nums.length; i++) {

if(!visited[i]) {

// 标记这轮循环中这个值已经访问过

visited[i] = true;

// 递归计算,加减乘除

dfs(numIndex, sum + nums[i]);

dfs(numIndex, sum - nums[i]);

dfs(numIndex, sum * nums[i]);

dfs(numIndex, sum / nums[i]);

// 恢复访问标识

visited[i] = false;

}

}

}

}

}

广度优先搜索(BFS)
  搜索步骤: 
  a .首先选择一个顶点作为起始顶点,并将其染成灰色,其余顶点为白色。 
  b. 将起始顶点放入队列中。 
  c. 从队列首部选出一个顶点,并找出所有与之邻接的顶点,将找到的邻接顶点放入队列尾部,将已访问过顶点涂成黑色,没访问过的顶点是白色。如果顶点的颜色是灰色,表示已经发现并且放入了队列,如果顶点的颜色是白色,表示还没有发现 
  d. 按照同样的方法处理队列中的下一个顶点。 
  基本就是出队的顶点变成黑色,在队列里的是灰色,还没入队的是白色。 

深度优先搜索(DFS)
  深度优先遍历图的方法是,从图中某顶点v出发: 
  a.访问顶点v; 
  b.依次从v的未被访问的邻接点出发,对图进行深度优先遍历;直至图中和v有路径相通的顶点都被访问; 
  c.若此时图中尚有顶点未被访问,则从一个未被访问的顶点出发,重新进行深度优先遍历,直到图中所有顶点均被访问过为止。 

参考链接:https://blog.csdn.net/yimixgg/article/details/90023121

参考链接:https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb?tpId=37&&tqId=21290&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking

题目来源:牛客网

以上是 Java机试题*:24点游戏算法(DFS:深度优先搜索) 的全部内容, 来源链接: utcz.com/z/391450.html

回到顶部