Java 解谜算法

Posted

技术标签:

【中文标题】Java 解谜算法【英文标题】:Java Puzzle Solving Algorithm 【发布时间】:2021-09-13 11:03:21 【问题描述】:

我需要帮助来编写可以将整数和最多 50 个网格作为输入的代码,并计算所需的最少点击次数(从全白的起始位置开始)以实现用户输入的网格.

我正在尝试为一个逻辑谜题编写一个算法,其中你有一个由 3×3 单元格组成的方形网格。每个单元最初都是白色或黑色的。当您单击一个正方形时,它会翻转该正方形的颜色以及它存在的四个紧邻的东、西、北和南邻居的颜色。 问题是找到将所有白色单元格的网格转换为输入网格的最小单元格点击次数(这总是可能的)。您不能旋转网格。

输入文件中的第一个值是一个整数 P(0

对于每个问题,输出一个整数,给出将所有白色单元格的网格转换为输入中给出的模式所需的最少点击次数。

输入 1 输入 2

https://i.stack.imgur.com/oI5JE.png

Sample Input 1 Sample Output 1
2 1
*.. 3
**.
*..
***
*..
..*

到目前为止,我已经编写了这段代码。

import java.util.Scanner;

public class CubePuzzle 
    public static void main(String[] args)
    
        Scanner sc = new Scanner(System.in);
        System.out.println("How many cubes do you want to solve?");
        int usersInt = sc.nextInt();

        if (usersInt < 1 || usersInt > 50)
            return;
        
        for (int i = 0; i <= usersInt; i++)
            sc.nextInt();
            sc.nextInt();
            sc.nextInt();
        
   

【问题讨论】:

你有什么问题?看起来您的代码可能已被截断。 好的,你的问题是什么?也似乎不完整 我不知道如何编写代码来提供我在描述中指定的所需输出。任何帮助表示赞赏。 【参考方案1】:

不知道怎么写代码的时候怎么写代码:

用你自己的话(伪代码)写出一系列的指令来做你想做的事情。如果你已经有一些代码,你可以输入一些代码。

这将建议输入和一些数据结构来存储您或程序使用的信息。

通过一些简单的示例浏览您的伪代码,并在纸上或文件中跟踪算法的进展情况。根据您发现的内容对其进行改进。

然后开始将其作为代码输入。继续前进和完善。如果您想以某种方式存储某些东西并且不确定,那么您将有一个更具体的问题要问,您会得到一个更具体的答案。同样,如果您想操作一些数据但不知道如何操作。

要找到达到目标所需的最少步数,您可能必须使用搜索树和回溯(无需实现严格的 API 质量二叉搜索树即可)。就像程序尝试一种方式并达到步骤数超过已发现在另一条路径中工作的数量的程度一样。所以它会放弃这种方式并尝试其他人击败当前的“赢家”。

看看问题,看看是否有数学属性可以减少工作量。您可能能够更早地缩短步骤或放弃失败者路径等。比如反射或旋转是否等效并立即消除路径。诸如此类。

通过一些示例,您可能会发现您可以通过查看模式将模式分组,而无需执行步骤。就像如果一个图案具有某种特征(可能是一些黑色方块或一些数量的一种颜色的相邻方块等),那么最小步数是两步,否则是三步。我没有仔细看。

祝你好运。

【讨论】:

以上是关于Java 解谜算法的主要内容,如果未能解决你的问题,请参考以下文章

并发解谜:Java Concurrency - Cyclicbarrier。正确用法?

个人向:经典PRG解谜、恐怖游戏盘点

PHP 字谜解谜器

基于声网 Flat 实现“成语解谜”的 Web 小游戏

基于声网 Flat 构建白板插件应用“成语解谜”的最佳实践

重力物理解谜游戏 ForiPad/iPhone!