Algorithm 将一个给定的字谜转换为另一个字谜所需的最小交换次数

Algorithm 将一个给定的字谜转换为另一个字谜所需的最小交换次数,algorithm,dynamic-programming,Algorithm,Dynamic Programming,给定两个字谜S1和S2,我们想将S1字谜转换为S2字谜。我们需要找出实现这一点所需的最小邻接交换数量 例如:S1:CAT和S2:ACT。在这里,互换的最小数量仅为1。将C换成A得到S2 我们如何使用动态规划来实现它。有可能吗?获得最佳解决方案的一种方法是将问题简化为 在这里,每个顶点都是使用给定字母的一个可能的字谜。当且仅当您可以通过一次交换从一个顶点移动到另一个顶点时,两个顶点之间的边(字谜)才存在 找到从输入字谜到所需字谜的最短路径将为您提供最佳路径数 无权图的最短路径问题可以用、BFS或来

给定两个字谜S1和S2,我们想将S1字谜转换为S2字谜。我们需要找出实现这一点所需的最小邻接交换数量

例如:S1:CAT和S2:ACT。在这里,互换的最小数量仅为1。将C换成A得到S2


我们如何使用动态规划来实现它。有可能吗?

获得最佳解决方案的一种方法是将问题简化为

在这里,每个顶点都是使用给定字母的一个可能的字谜。当且仅当您可以通过一次交换从一个顶点移动到另一个顶点时,两个顶点之间的边(字谜)才存在

找到从输入字谜到所需字谜的最短路径将为您提供最佳路径数


无权图的最短路径问题可以用、BFS或来解决。

我们能在不构建整个图的情况下解决吗???@vijji是的。您不需要整个图形,您可以通过构建一个函数来“动态”生成它
next(anagram)={在一次交换中可以得到的所有可能的anagram}
。通过这种方式,在找到解决方案之前,您只会生成图形的一部分。这意味着我们只是在应用蛮力技术…但以更好的方式…@vijji部分正确。除非您使用*算法,这是通知的。你可以使用
#错误地放置_chars/2
作为一种可接受的启发式方法。你如何防止图形“循环”,我的意思是,一系列交换将你引导到某个前一个节点?(是的,我知道算法仍然有效)。