【问题标题】:A maximum flow solution to a modified Knight travel problem修正 Knight 旅行问题的最大流解
【发布时间】:2018-10-15 23:28:06
【问题描述】:

给你一个 n x n 棋盘,上面有 k 个骑士(相同颜色)。有人在 k 个方格上洒了强力胶,如果骑士在其中一个方格上完成移动,它就会永远卡住。此外(这就是为什么我们不能拥有好东西的原因)有人切掉了一些方格,所以棋盘上有洞。您将获得骑士的初始位置。骑士像在普通国际象棋中一样移动,但与普通国际象棋不同的是,每回合所有的骑士都会同时移动(当然,被卡住的骑士除外)。在每一步结束时,一个方格不能被超过 1 个骑士占据。洞格也不能被骑士占据(但它们确实算作骑士可以跳过的格子)。给出一个 0(t x poly(n)) 时间的算法来确定你是否可以使用

我最初的想法是将这个问题表述为一个最大流问题,并使用 Ford-Fulkerson 算法来解决它。但我不确定我的节点和边缘应该是什么。任何的想法?谢谢!

【问题讨论】:

  • 请不要将文字或代码作为图片发布;它无法被屏幕阅读器搜索、复制或阅读,并且可能无法在小屏幕上正常显示。
  • 请问这是作业题吗?
  • @Codor:是的。我被困了很长时间。非常感谢您的帮助!

标签: algorithm graph big-o ford-fulkerson


【解决方案1】:

所描述的问题可以建模为如下的分层网络问题。网络的节点集由人工起始节点s和人工终端节点t组成。中间节点集由n * n棋盘的k副本组成,这意味着有

2 + k * n * n

节点总数。想象s 在顶部,然后是棋盘副本的k 层。终端节点t 将位于底部。

s 连接到第一个棋盘中的初始马位,并将t 连接到k-th 棋盘中马的所有所需终端位置。

对于每个i in {1,...,k-1},将i-th 棋盘中的每个方格连接到i+1棋盘中的每个方格当且仅当它可以通过合法的马步到达。最后,删除所有留下强力胶合正方形的边(除非t 是它的尾部)并删除所有导致孔的边。此外,每条边都被限制为允许至少0 和最多1 的流。总的来说,网络最多有

2 * k + k * n * n = k * ( 2 + n * n )

边缘。进一步考虑到每个方格最多被一个骑士占据,每个中间节点的流量也必须受到1的约束。这可以通过将每个中间节点扩展为两个节点并通过附加边连接它们来完成,其中流受1 约束,这导致节点和边的集合最多增长2

当且仅当网络承认t-价值流k,其中骑士的移动顺序和实现网络流双射对应。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-30
    相关资源
    最近更新 更多