如何解决Java 解谜算法
我需要帮助编写可以将整数和最多 50 个网格作为输入的代码,并计算获得用户输入的网格所需的最小点击次数(从全白起始位置) .
我正在尝试为一个逻辑谜题编写算法,其中有一个 3×3 单元格的方格。每个单元格最初是白色或黑色。当您单击一个正方形时,它会翻转该正方形的颜色及其四个相邻的东、西、北和南邻国的颜色。 问题是找到将所有白色单元格的网格转换为输入网格的最小单元格点击次数(这总是可能的)。您无法旋转网格。
对于每个问题,输出一个整数,给出将所有白色单元格的网格转换为输入中给定模式所需的最小点击次数。
输入 1 输入 2
https://i.stack.imgur.com/oI5JE.png
样本输入1 | 样本输出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();
}
}
}
解决方法
当你不知道如何写代码时如何写代码:
用你自己的话(伪代码)写出一系列可以做你想做的事情的指令。如果你已经有一些代码,你可以输入一些代码。
这将建议输入和一些数据结构,以便在您或程序使用它时存储信息。
通过一些简单的示例来了解您的伪代码,并在纸上或文件中跟踪算法的进展情况。根据您发现的内容对其进行优化。
然后开始输入它作为代码。继续走过去和提炼。如果您想以某种方式存储某些东西但不确定,那么您将有更具体的问题要问,您将得到更具体的答案。同样,如果您想操作一些数据但不知道如何操作。
要找到达到目标所需的最少步骤数,您可能必须使用搜索树和回溯(无需实施严格的 API 质量二叉搜索树即可完成) )。就像程序尝试一种方式并达到步数超过已发现在另一条路径中工作的数量的点。所以它会放弃这种方式并尝试其他人击败当前的“赢家”。
一定要看看问题,看看是否有数学属性可以减少工作量。您可能能够缩短步骤或提前放弃失败者路径等。例如反射或旋转是否等效并立即消除路径。诸如此类。
通过研究一些示例,您可能会发现只需查看模式即可将模式分类为组,而无需执行步骤。就像如果图案具有某种特征(可能是一定数量的黑色方块或一定数量的一种颜色的相邻方块等),那么最小步长为 2,否则为 3。没仔细看。
祝你好运。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。