P1206CoVH之再破难关

Accepted
标签: [显示标签]

背景

在瞬间之下,明白所有真相
只要开始,就不会停止...

揭开唯一事实,外表是小孩,头脑却是大人
他的名字就叫...名侦探柯南!

描述

[CoVH07]
OIBH组织派出的黄金十二人+青铜五小强还没有到, 他们只能指望原先的机关能够阻拦住柯南的脚步.

柯南打开大门之后发现里面还有一个门, 门上还有一个神奇的锁(-,-)

这是一个4*4的锁, 上面有8个凸起的格子和8个被按下的格子
当且仅当两个格子有公共边时, 则称这两个格子是相邻的。


每次操作只能够交换相邻的两个格子

柯南看到了初始锁的状态 和目标锁的状态
同样组织只允许他用最少步数打开锁

格式

输入格式

第1到4行每行四个数字(1或者0),描述了初始锁状态

接着是一个空行

第6到9行每行四个数字,描述了最终锁状态

输出格式

输出文件只有一行,是一个整数n,表示最少的操作次数。

样例1

样例输入1[复制]

1111
0000
1110
00101010
0101
1010
0101

样例输出1[复制]

4

限制

全部1秒

提示

柯南成功突破了又一道门
他将继续向前进
而黄金十二人+青铜五小强又在哪里.......

来源

提供:*******@***牛
对他的无私贡献表示崇拜和感谢!@_@

//--------------------------------------------------------------------------------------------------------//

这题显然是一道BFS题,而且这题的判重也不难。每一个01矩阵都只有16个格子,每个格子可以是0或1,所以状态是2^16种。所以直接开个7W的布尔数组就可以判重了!总体来说不是特别难,只是要注意下读入时的换行符。

#include<stdio.h>
using namespace std;
struct  o{bool map[5][5];};
//4*4的01矩阵
bool gone[70000]={false};
//判重用的数组
o que[100000];long top=0,tail=0;long ans=0;o start,end;long s,e;bool isend=false;
//一些乱七八糟的变量
long zm(o a) //将矩阵转为数字,方便判重
{long ans=0;for(int i=1;i<=4;i++){       ans*=16;for(int j=1;j<=4;j++)if(a.map[i][j]==true)ans+=1<<(j-1);}return ans;
}
o  nzj(long a) //将数字转为矩阵
{           o k;for(int i=1;i<=4;i++)for(int j=1;j<=4;j++)k.map[i][j]=false;for(int i=4;i>=1;i--){long y=a%16;a/=16;for(int j=1;j<=4;j++)if((1<<(j-1))&y>0)k.map[i][j]=true;}return k;
}
void kz(o s) //对于某个矩阵S的扩展。其中枚举16个格子为第一个交换格子,直接只要考虑他们和右边,下面交换即可
{for(int i=1;i<=4;i++)for(int j=1;j<=4;j++){if(j+1<=4){bool temp=s.map[i][j];s.map[i][j]=s.map[i][j+1];s.map[i][j+1]=temp;long zb=zm(s);if(zb==e){printf("%ld",ans);isend=true;return;}if(gone[zb]==false){gone[zb]=true;tail++;que[tail]=s;}temp=s.map[i][j];s.map[i][j]=s.map[i][j+1];s.map[i][j+1]=temp;}if(i+1<=4){bool temp=s.map[i][j];s.map[i][j]=s.map[i+1][j];s.map[i+1][j]=temp;long zb=zm(s);if(zb==e){printf("%ld",ans);isend=true;return;}if(gone[zb]==false){gone[zb]=true;tail++;que[tail]=s;}temp=s.map[i][j];s.map[i][j]=s.map[i+1][j];s.map[i+1][j]=temp;}}
}
int main()
{for(int i=1;i<=4;i++){for(int j=1;j<=4;j++){char u;scanf("%c",&u);start.map[i][j]=(u=='1');}char s1;scanf("%c",&s1);}char s1;scanf("%c",&s1);for(int i=1;i<=4;i++){for(int j=1;j<=4;j++){char u;scanf("%c",&u);end.map[i][j]=(u=='1');}char s1;scanf("%c",&s1);}//蛋疼欲碎的读入!s=zm(start);e=zm(end);gone[s]=true;if(s==e){printf("0");return 0;}tail++;que[tail]=start;top++;while(true)
//BFS{ans++;long u=tail;for(long i=top;i<=u;i++){kz(que[i]);if(isend)return 0;}top=u;}return 0;
}

VIJOS 1206 CoVH之再破难关相关推荐

  1. Vijos CoVH之再破难关(搜索+hash)

    背景 在瞬间之下,明白所有真相 只要开始,就不会停止... 揭开唯一事实,外表是小孩,头脑却是大人 他的名字就叫...名侦探柯南! 描述 [CoVH07] OIBH组织派出的黄金十二人+青铜五小强还没 ...

  2. 【11分钟训练完ImageNet】DNN训练再破纪录,1024 CPU Caffe开源

    此前,伯克利.TACC和UC戴维斯的研究人员使用新算法,在24分钟内训练完AlexNet,1小时训练完ResNet,创下了纪录.现在,他们继续推进,使用1024个CPU,在11分钟内训练完AlexNe ...

  3. SnnGrow快讯:Apple Books上线AI读书功能、有声书市场将迎来颠覆时刻、刚过7岁生日的OpenAI估值达到290亿美元、跻身全球独角兽排行榜前20、中国航天2023全年发射将再破60次

    一.Apple Books上线AI读书功能,有声书市场将迎来颠覆时刻 卫报的记者发现,Apple 悄悄推出了人工智能讲述的语音书功能,可能标志着人类播音员时代终结的开始,也可能是科技公司试图颠覆有声读 ...

  4. 语音识别再破记录,这个领域究竟哪家强?

    近日,一则题为"词错率2.97%:云从科技刷新语音识别世界纪录"文章进入大众的视野,文中的宣传"将错词率(Word Error Rate,WER)降到了惊人的2.97%, ...

  5. [最短路] [Vijos P1184] CoVH之华丽的IP伪装 (ConanIP)

    这是一道神奇的题 这道题的题目说明全VJ最长- 这道题最让人看不懂- 这道题也是容易在CoVH模拟赛里卡死的一个- 所以,我(负责任地)把所有说明打上来(可能加上各种吐槽) Background 背景 ...

  6. 自研云原生数据仓库AnalyticDB再破权威评测TPC-DS世界纪录!

    北京时间 2020/5/4 青年节,TPC(全球最知名非盈利的数据管理系统评测基准标准化组织)官网正式上线AnalyticDB TPC-DS成绩,AnalyticDB通过严苛的TPC-DS全流程测试, ...

  7. 自研云原生数据仓库AnalyticDB再破权威评测TPC-DS世界纪录

    北京时间 2020/5/4 青年节,TPC(全球最知名非盈利的数据管理系统评测基准标准化组织)官网正式上线AnalyticDB TPC-DS成绩,AnalyticDB通过严苛的TPC-DS全流程测试, ...

  8. 跻身全球前十,金山云欲用AIoT再破局

    近年来,作为中国最大的独立云服务商,金山云的发展可谓是又快又稳. "快"体现在金山云的营收快速增长.据国际数据公司 (IDC)首次发布<全球公有云服务市场(2018下半年)跟 ...

  9. 内容行业进入下半场,创作型平台如何再破局?

    黑天鹅飞过之后,各个行业冰山下的支点开始露出水面. 2020年,这场把全国人民闷在家里大半年的疫情里,实体行业遭受到了无差别的致命攻击,而各类互联网产品则迎来了大规模增长.数据显示,无论是用户数量还是 ...

最新文章

  1. Linux命令学习总结:hexdump
  2. oracle数据源的报表sql计算慢解决
  3. java MDC_log4j MDC实现日志追踪
  4. 遇见那个对的人,便是爱情
  5. win10安装pip
  6. df -h 显示100%的解决办法
  7. 在logback、log4j等日志输出工具中输出java异常调用堆栈
  8. 【操作系统笔记】中断和异常
  9. drools rule (二) LHS语法详解
  10. ELK 收集多个日志文件
  11. 【图像融合】基于matlab高斯金字塔+拉普拉斯金字塔彩色水下图像融合【含Matlab源码 1629期】
  12. 咸鱼ZTMR实例—PS2手柄
  13. Pepper/Nao中级教程:第六章 Choregraphe写App时缺少Python lib库时如何解决
  14. C#软件绑定QQ群验证代码
  15. 腾讯云服务器配置jre、jdk、tomcat
  16. python 合并word文件_python读取word合并单元格
  17. CSS精灵技术与字体图标
  18. Lessonnbsp;52nbsp;Anbsp;prett…
  19. 与二分来一场美丽的邂逅
  20. 微软云Linux服务器 Mysql、tomcat远程连接错误解决办法

热门文章

  1. 阿里云ECS建站教程(超详细图文教程)
  2. 困在双11“流量仓”的小红书,能否撑起200亿美元估值?
  3. 关于RSA中间人攻击
  4. prometheus监控告警功能
  5. Google推出拼音输入法了!
  6. 如何将ppt演示文稿上传到微信公众号?
  7. 机器人运动学、动力学基础上利用MATLAB进行PID控制仿真
  8. 如何制作并使用python发布的模块压缩包和whl包,并进行pip安装和使用教程,加上传Pypi,上传之后又如何增删whl项目
  9. Windows Server 2016修改计算机名
  10. USB1.1学习笔记