对网格中从左上到右下的所有路径仅访问一次正方形的所有路径进行回溯算法的优化

问题描述

问题陈述:计算nxn中的路径数 从左上角到右下角的网格,以便路径访问 每个方块恰好一次。例如,在7£7的网格中,有111712个这样的网格 路径。

算法和优化:我们从简单的回溯算法开始,然后 通过观察如何修剪搜索来逐步优化它。

这是我不理解的部分:

优化1 :在任何解决方案中,我们都首先向下或向右移动一步。总有两个 第一步之后,关于网格对角线对称的路径。因此,我们可以决定总是首先向下(或向右)移动一步,然后 最后将解决方案的数量乘以2。

我知道会有对称解,所以我们只能找到其中的一半并将其乘以2。但是我们将如何实现呢?


这句话是什么意思?:

因此,我们可以决定总是首先向下(或向右)移动一步

这是否意味着第一步将始终是向下的(或正确的)?从根本上调整基本递归的第一步?还是意味着对每个递归步骤都这样做?还是那意味着完全不同。我在理解上有很多麻烦。请详细解释。

解决方法

对于每个路径(例如“ RDDRRD”),都有一个镜像路径,您可以在其中交换D和R(例如“ DRRDDR”)。 文字说,如果找到以D开头的所有路径,则可以通过执行反演来平凡地生成以R开头的所有路径。

因此,您可以简单地假设第一个字母为D并将得到的路径数乘以2。

对于涉及动态编程的解决方案,这并没有多大区别,但是对于幼稚的回溯解决方案,这是2倍!