【发布时间】:2016-03-19 07:33:58
【问题描述】:
你在一个大的 NxN 网格中,有 (2
您从房间 (1,1) 开始,这是唯一一个最初“开启”的房间。在一些 房间里,你会发现电灯开关,你可以用它来切换 其他房间的状态;例如房间里可能有一个开关 (1,1) 在开和关之间切换房间 (1,2) 的状态。你可以 只能通过“on”房间,并且只能从房间 (x,y) 移动到 它的四个相邻邻居 (x−1,y)、(x+1,y)、(x,y−1) 和 (x,y+1)(或 如果这个房间在网格的边界上,邻居可能会更少)。
找出您可以“开启”的最大房间数。
示例:输入的第一行包含整数 N 和 M (1≤M≤20,000)。
接下来的 M 行每行描述一个带有四个的电灯开关 整数 x, y, a, b,房间 (x,y) 中的开关可用于切换 (a,b) 房间的状态。任何房间都可能存在多个开关,并且 多个开关可以切换任何房间的状态。
输出:单行给出您可以打开的最大房间数 '开'。
样本输入:
3 6 1 1 1 2 2 1 2 2 1 1 1 3 2 3 3 1 1 3 1 2 1 3 2 1样本输出:
5
我自己完成了这个例子。我发现的最大情况是当你在 (1,1) 中时,你打开 (1,2) 和 (1,3)。然后转到 (1,3) 并打开 (2,1)。然后前往 (2,1) 并打开 (2,2)。但是,您无法到达 (2,3),因为它仍处于“关闭”状态。最多可提供 5 个“开”的房间。
到目前为止我的方法:
我认为这可能是动态编程或贪心程序。由于 N 的界限非常低,我在想每次访问一个节点时,都会更新可能的可访问地点的数量。也可能有一种方法,您只尝试找到打开开关的地方并尝试前往那里。
您能否指出一个算法来解决这个问题,也许还有一些伪代码,因为我对这些类型的问题有点陌生。
【问题讨论】:
标签: java c++ algorithm graph dynamic-programming