我有一个大小为2*N
数组的矩阵A,每个元素都是*
检查点或X
,对于危险点,它不允许进入危险点。
您需要找到覆盖所有检查点的exist a path
而不访问危险点,并且每个点都是visited once
。
您可以在任何检查站开始您的旅程。
例如:
*X**
***X
存在访问所有检查点的路径。
我的方法:
选择从0到N遇到的第一个检查点:
如果你在index i
并且其他数组(A [0]或A [1])包含chekpoint,那么切换数组,如果不能继续在同一个数组中。
最后检查是否访问了所有检查点。
我的方法并没有正确回答这里有什么问题
代码:
dfs(int x , int i){
Visted[x][i] = true;
if(!Visted[x^1][i] && A[x^1][i] == '*')
dfs(i, x^1);
else if(i+1 < n && A[x][i] == '*')
dfs(i+1,x);
}
答案 0 :(得分:0)
正如您所看到的,一旦您选择了初始点,算法的解决方案将是唯一的或不存在的,因为它最多只能在每个单元格中尝试一步。
所以,问题可能在于你没有表现出来的部分:你如何选择初始点? 使用此算法,您可以尝试两种情况,并查看其中一条结果路径是否涵盖每个单元格。
以下是两个例子。 在左边,我们必须从第一行开始。 在右边,我们必须从第二行开始。
*X 1X ** 23
** 23 *X 1X