在2d矩阵中一次采取两个步骤

时间:2015-12-14 17:11:58

标签: java matrix breadth-first-search

您将获得一个使用这三个可能值初始化的MxN 2D网格。

-1 - 墙壁或障碍物。

0 - 门。

INF - Infinity意味着一个空房间

将每个空房间填充到离它最近的门的距离。

例如,给定2D网格:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="commentOwnerPost">
  <div class="commentPostHeader">
    <h4 class="commentOwnerName"><a href="">NavyFoxKid</a></h4>
    <h4 class="commentPostDate">3 days ago</h4>
  </div>
  <p class="commentText"> lorem ipsum dolor sit amet consectur lorem ipsum dolor sit amet consectur
	amet consectur lorem ipsum dolor sit amet consectur lorem ipsum
  </p>
	
  <div class="commentPostFooter">
    <a class="btnReply">Reply</a>
    <a class="btnSeeMore">See More</a>
  </div>
</div>


<div class="commentOwnerPost">
  <div class="commentPostHeader">
    <h4 class="commentOwnerName"><a href="">NavyFoxKid</a></h4>
    <h4 class="commentPostDate">3 days ago</h4>
  </div>
  <p class="commentText"> lorem ipsum dolor sit amet.
  </p>
	
  <div class="commentPostFooter">
    <a class="btnReply">Reply</a>
    <a class="btnSeeMore">See More</a>
  </div>
</div>

运行该功能后,2D网格应为:

INF  -1  0  INF
INF INF INF  -1
INF  -1 INF  -1
0    -1 INF INF

我从每0(门)开始使用BFS,并不断更新每个INF的最小值。下面是我的代码,它有效。

3  -1   0   1
2   2   1  -1
1  -1   2  -1
0  -1   3   4

但如果我们一次可以采取两个步骤,例如“左左”或“右上”,该怎么办?那么如何计算从每个INF到最近的门(0)的距离?我们还可以使用BFS吗?

1 个答案:

答案 0 :(得分:1)

当然可以。现在你正在测试坐标:

(i+1, j)
(i,   j+1)
(i-1, j)
(i,   j-1)

对应于(i, j)的北,南,东和西的值。只需添加以下测试:

(i+1, j+1)
(i-1, j-1)
(i+1, j-1)
(i-1, j+1)

对应于(i, j)周围的对角线。

编辑:我误读了原帖。您还需要添加任何其他可能的组合,例如(i+2, j),对应于“右侧”。在开始之前制作可能结果的图表并制作完整列表将会很有帮助。

小心点。您拥有的代码非常混乱,添加四个语句时很容易出错。慢慢地,三重检查你的工作。