博物馆守卫问题(世界名画展览馆)

在一座博物馆中,为了保护珍贵文物,使用警卫机器人进行巡逻。每个机器人可以覆盖自身及其周围四个房间。任务是设计一种摆放方案,以最少的机器人数量覆盖所有房间。输入包括博物馆的行数和列数,输出是所需机器人数量及布局。本文探讨了一种时间复杂度较高的解决方案,使用优先队列,但可能不适用于大规模场景,并附带了作者的理解示意图。
摘要由CSDN通过智能技术生成

世界名画展览馆(博物馆守卫问题)

在某博物馆中摆放了非常重要的文物,为了节省人力,该博物馆专门购买了警卫机器人来看管这些文物。该博物馆的房间排列整齐,房间的大小相同。每个警卫机器人能够巡查的范围除本身所在房间外,还包括其起始安放的房间的上下左右四个房间。为了减少摆放的机器人的数量,请你设计一种最佳的摆放方案,使得摆放的机器人数量最少。
输入:
输入一行,有两个整数m,n,分别表示该博物馆每行的房间数和每列的房间数。博物馆总房间数即为m*n。
输出:
输出的第一行表示需要的机器人的数量,其后m行,每行有n个元素,每个元素的值为0或1,分别表示对应的房间是否摆放机器人。0表示不摆放,1表示需要摆放。

样例输入:
4 4
样例输出:
4
0 0 1 0
1 0 0 0
0 0 0 1
0 1 0 0 

对于此题有不少的解法,以下代码属于时间复杂度较高的一种做法,使用的优先队列,但如果输入5x5的话可能跑不起来,仅用于自己学习。
未经作者授权,禁止转载或作他用。


#include"algorithm.h"
#include<queue>

#define max 100

using namespace std;

int col = 0;
int row = 0;
int board[max][max];
// 记录最优的放置个数: n*m/3 - 1
int best;
int ans_;	// 记录个数
int ans2[max][max];

struct node {
   
	// 棋牌的状态,
	// board[i][j]=0 表示没有任何处理,
	// = 1 放置守卫
	// = 2 被监视
	int board[max][max];
	int x, y;	// 当前守卫放置的位置
	int sum;	// 守卫的总个数

	node(int board[max][max], int x, int y, int sum) {
   
		for (int i = 0; i < row; i++) {
   
			for (int j = 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值