一、算法问题描述
世界名画陈列馆问题。世界名画陈列馆由 m×n 个排列成矩形阵列的陈列室组成。为
了防止名画被盗,需要在陈列室中设置警卫机器人哨位。每个警卫机器人除了监视它所在
的陈列室外,还可以监视与它所在的陈列室相邻的上、下、左、右 4 个陈列室。试设计一
个安排警卫机器人哨位的算法,使得名画陈列馆中每一个陈列室都在警卫机器人的监视之
下,且所用的警卫机器人数最少。
二、算法问题形式化表示
本问题的 m*n 的陈列室的解可表示如下图所示。其中 1 代表在该陈列室设置警卫机
器人哨位,0 表示未在该陈列室设置警卫机器人哨位。
0 1 0 0 1 0 0 1
0 0 0 1 0 0 1 0
1 0 0 0 0 1 0 0
0 0 1 0 0 0 0 1
0 1 0 0 1 0 0 0
0 0 0 1 0 0 1 0
1 0 1 0 0 1 0 1
m*n 陈列室的可能解
最为极端的情况是所有元素的值为 1。那什么情况下是最优解呢?就是设置警卫机器人
哨位数最少即为最优。因为每个矩阵中的值都可以为 1 或 0,有 m*n 个元素,有
种可能中遍历找到满足约束条件的 1 的个数最小的矩
阵。由此可见这是一个 NP 问题。这里的约束条件就是当某一个元素为 1 时,相邻的 4 个
方向上的元素值可以为 0。
三、期望输入与输出
输入:
第一行有 2 个正整数 m 和 n (1≤m,n≤20)
输出:
将计算出的警卫机器人数及其最佳哨位安排输出。第一行是警卫机器人数;接下来的
m 行中每行 n 个数,0 表示无哨位,1 表示哨位。
样例输入:
4 4
样例输出:
4
0 0 1 0
1 0 0 0
0 0 0 1
0 1 0 0
- 1
- 2
前往页