【发布时间】:2023-04-01 15:06:02
【问题描述】:
我正在尝试解决 this 显然是初学者级别的问题。但甚至无法想出一个蛮力的方法。
这是问题陈述:
约翰尼在记住小的素数方面有些困难。所以,他的计算机科学老师让他经常玩以下益智游戏。
这个谜题是一个 3x3 的棋盘,由 1 到 9 的数字组成。这个谜题的目标是交换棋子,直到达到以下最终状态:
1 2 3 4 5 6 7 8 9在每一步,如果它们的和是质数,Johnny 可以交换两个相邻的图块。如果两个图块有共同的边缘,则它们被认为是相邻的。
帮助 Johnny 找到达到目标状态所需的最短步数。
输入
第一行包含t,测试用例的数量(大约50个)。然后 t 测试用例跟随。每个测试用例都包含一个 3x3 表格,描述了 Johnny 想要解决的难题。
连续测试用例的输入数据用空行分隔。
输出
为每个测试用例打印一行,其中包含解决相应难题所需的最短步骤数。如果无法达到最终状态,则打印数字 -1。
示例
输入:
2 7 3 2 4 1 5 6 8 9 9 8 5 2 4 1 3 7 6输出:
6 -1
【问题讨论】:
-
您的问题到底是什么?你可以说得更详细点吗?不要指望社区在线解决这个问题。但是,如果您有非常具体的问题,我们可以提供帮助。
-
是的,我也不希望人们为我解决这个问题。我想要的只是一种开始的方法。我什至想不出一个直接和蛮力的方法来开始。所以我正在寻求任何提示或想法,即使它是简单的英语而不是伪代码。
-
你想学习像 Dijkstra 和 BFS 这样的图算法。
-
您必须搜索可能的“动作”。您可以使用递归来跟踪所有解决方案中最短的解决方案。 BFS 算法将是首选,但这是一个相对较小的搜索树,因此 DFS 也可以(因此递归)。
-
我认为问题的分类是错误的——BFS 是正确的方法(我点击了一些解决方案来查看他们正在做的事情)。我将其称为中级问题,而不是初学者级问题。
标签: algorithm