5-19 世界名画陈列馆问题


问题描述

世界名画陈列馆由 m×nm×n m \times n 个排列成矩形阵列的陈列室组成。为了防止名画被盗,需要在陈列室中设置警卫机器人哨位。每个警卫机器人除了监视它所在的陈列室外,还可以监视与 它所在的陈列室相邻的上、下、左、右 4 个陈列室。试设计一个安排警卫机器人哨位的算法, 使得名画陈列馆中每一个陈列室都在警卫机器人的监视之下,且所用的警卫机器人数最少。

设计一个算法,计算警卫机器人的最佳哨位安排,使得名画陈列馆中每一个陈列室都在 警卫机器人的监视之下,且所用的警卫机器人数最少。

数据输入:
第一行有 2 个正整数 m 和 n (1≤m,n≤20)。


Java

package Chapter5HuiSuFa;import java.util.Arrays;
import java.util.Scanner;public class ShiJieMingHuaChenLieGuan {private static int MAX = 1000000;private static int MLEN = 50;private static int m,n;private static int[][] d = {{0,0,0},{0,0,0},{0,0,-1},{0,-1,0},{0,0,1},{0,1,0}};private static int[][] x,y,bestx;private static int best,k,t,t1,t2,more;public static void main(String[] args){Scanner input = new Scanner(System.in);while (true){k = 0;t = 0;n = input.nextInt();m = input.nextInt();x = new int[MLEN+1][MLEN+1];y = new int[MLEN+1][MLEN+1];bestx = new int[MLEN+1][MLEN+1];compute();}}private static void compute(){more = m/4+1;if(m%4 == 3) more++;else if(m%4 == 2) more+=2;t2 = m*n+more+4;t1 = m*n+4;best = MAX;if((n==1) && (m==1)){System.out.println(1);System.out.println(1);return;}for(int i=0; i<=m+1; i++){y[0][i] = 1;y[n+1][i] = 1;}for(int i=0; i<=m+1; i++){y[i][0] = 1;y[i][m+1] = 1;}search(1,0);output();}private static void search(int i, int j){do{j++;if(j > m) { i++; j=1; }}while (!((y[i][j]==0) || (i>n)));if(i > n){if(k < best) { best=k; copy(bestx,x); }return;}if(k+(t1-t)/5 >= best) return;if((i<n-1) && (k+(t2-t)/5)>=best) return;if(i < n){change(i+1,j);search(i,j);restore(i+1,j);}if((j<m) && ((y[i][j+1]==0) || (y[i][j+2]==0))){change(i,j+1);search(i,j);restore(i,j+1);}if((y[i+1][j]==0) && (y[i][j+1]==0)){change(i,j);search(i,j);restore(i,j);}}private static void change(int i, int j){x[i][j] = 1; k++;for(int s=1; s<=5; s++){int p = i+d[s][1];int q = j+d[s][2];y[p][q]++;if(y[p][q]==1) t++;}}private static void restore(int i, int j){x[i][j] = 0; k--;for(int s=1; s<=5; s++){int p = i+d[s][1];int q = j+d[s][2];y[p][q]--;if(y[p][q]==0) t--;}}private static void copy(int[][] des, int[][] src){for(int i=0; i<src.length; i++)des[i] = Arrays.copyOf(src[i],src[i].length);}private static void output(){System.out.println(best);for(int i=1; i<=n; i++){for(int j=1; j<=m; j++)System.out.print(bestx[i][j]+" ");System.out.println();}}
}

Input & Output

4 4
4
0 0 1 0
1 0 0 0
0 0 0 1
0 1 0 0 8 13
26
0 0 0 0 1 0 0 0 1 0 0 1 0
1 1 1 0 0 0 1 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 1 1 0 1
0 0 1 0 0 0 0 1 0 0 0 0 0
1 0 0 0 0 1 0 0 0 0 0 1 0
0 0 0 1 0 0 0 0 1 1 0 0 0
0 1 0 0 0 0 1 0 0 0 0 0 1
0 1 0 0 1 0 0 0 1 0 1 0 0 

Reference

王晓东《计算机算法设计与分析》(第3版)P186

算法设计与分析: 5-19 世界名画陈列馆问题相关推荐

  1. 算法设计三(4)——世界名画陈列馆问题

    pan.baidu.com/s/1w-VSMWmr9ntEWWdxZoD4Yw  码:jnlh 算法分析与设计 时间 2020.5.17 实验名称 世界名画陈列馆问题 实验目的 通过上机实验,要求深层 ...

  2. 计算机算法设计与分析考试题,《计算机算法设计与分析》习题及答案

    <计算机算法设计与分析>习题及答案 一.选择题 1.二分搜索算法是利用( A )实现的算法. A.分治策略 B.动态规划法 C.贪心法 D.回溯法 2.下列不是动态规划算法基本步骤的是( ...

  3. 计算机算法设计与分析读后感,算法设计与分析基础经典读后感有感

    <算法设计与分析基础>是一本由Anany levitin著作,清华大学出版社出版的胶版纸图书,本书定价:49.00元,页数:409,特精心从网络上整理的一些读者的读后感,希望对大家能有帮助 ...

  4. 【算法设计与分析】经典常考三十三道例题AC代码

    ❥小虾目前大三,我校在大一下开设<数据结构>这门课,大二上开了<算法设计与分析>这门课,很庆幸这两门课的上机考试总成绩一门100,一门99,最后总分也都90+.下文会给出机试的 ...

  5. 循环赛日程表非递归Java_王晓东《算法设计与分析》课件.ppt

    <王晓东<算法设计与分析>课件.ppt>由会员分享,可在线阅读,更多相关<王晓东<算法设计与分析>课件.ppt(356页珍藏版)>请在人人文库网上搜索. ...

  6. C++算法设计与分析课后习题(第三章)

    C++算法设计与分析课后习题[第三章] 前言 一.求2+22+222+2222+...+22...(n个2)...22(精确计算) 变量解释 运行截图 二.编写一个算法,其功能是给一维数组a输入任意6 ...

  7. 算法设计与分析(python版)-作业一

    参考教材:算法设计与分析(Python版)         作者:王秋芬 1 . 容易 (4分)2 n=O(100n ^2) 错误 2 . 容易 (3分)10=θ(log10) 正确 3 . 容易 ( ...

  8. 算法设计与分析: 5-22 魔方(Rubik's Cube)问题

    5-22 魔方(Rubik's Cube)问题 问题描述 3×3×33×3×33\times3\times3 魔方的构造如图所示.图中英文字母 U,L,F,R,B,D 分别表示魔方的 6 个面中的上面 ...

  9. 算法设计与分析(python版)-作业三

    参考教材:算法设计与分析(Python版)         作者:王秋芬 1 . 普通 (5分)以下问题中,哪些问题的分治算法消耗的时间与输入序列无关.() A. 二分查找 B. 合并排序 C. 快速 ...

最新文章

  1. python运行速度和电脑配置有关系吗-学python最电脑配置有要求么
  2. 解决oracle ORA-01078,LRM-00109故障一例!
  3. 在线浏览器摄像头软件!妈妈再也不用担心我的windows摄像头驱动没更新啦!
  4. Ubuntu20.04开机界面(boot animation)改成Windows95
  5. 数据结构无头结点单向不循环链表(C语言版)
  6. JVM因“ OutOfMemory”错误而关闭-我该怎么办?
  7. 4.企业应用架构模式 --- Web表现层
  8. java web邮件收发组件
  9. VB 6.0下载|Visual Basic 6.0简体中文企业版下载
  10. cad计算机绘图等级考试,全国CAD技能等级考试情况
  11. diy计算机英语,电脑组装DIY基本英语单词
  12. vue批量打包下载图片
  13. 网站卡死服务器2008,winserver2008r2频繁卡死?
  14. Cisco Packet Tracer Student的路由器接口配置
  15. The 2022 ICPC Asia Regionals Online Contest (I)
  16. 多项式在matlab中的应用,matlab的应用-多项式函数及多项式拟合
  17. 使用Python获取股市融资融券数据并绘制曲线
  18. 教资笔记(综合素质篇)
  19. 坐标系统概念(转载)
  20. 利用随机森林进行特征重要性排序

热门文章

  1. WPS强占8080端口
  2. 关于京沪高铁与区域经济论坛
  3. 力扣:Dota2·参议院
  4. 网络工程师 考试命令合集 交换机、路由器、ACL、NAT、防火墙等配置命令
  5. c语言学习--关于函数的参数传递(汇编和可执行文件)
  6. 深入研究核辐射!核辐射的原理(转)
  7. mc服务器端口被占用,Minecraft服务器联接超时
  8. java8 minecraft_我的世界java8对minecraft的影响
  9. vue lang_Vue + H5 最佳实践模板
  10. 《算法帝国》读后感(一)