寻找涵盖所有检查点的路径

时间:2017-05-28 08:33:31

标签: algorithm graph

我有一个大小为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);
}   

1 个答案:

答案 0 :(得分:0)

正如您所看到的,一旦您选择了初始点,算法的解决方案将是唯一的或不存在的,因为它最多只能在每个单元格中尝试一步。

所以,问题可能在于你没有表现出来的部分:你如何选择初始点? 使用此算法,您可以尝试两种情况,并查看其中一条结果路径是否涵盖每个单元格。

以下是两个例子。 在左边,我们必须从第一行开始。 在右边,我们必须从第二行开始。

*X    1X                 **    23
**    23                 *X    1X