VIJOS 1206 CoVH之再破难关
背景
在瞬间之下,明白所有真相
只要开始,就不会停止...
揭开唯一事实,外表是小孩,头脑却是大人
他的名字就叫...名侦探柯南!
描述
[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之再破难关相关推荐
- Vijos CoVH之再破难关(搜索+hash)
背景 在瞬间之下,明白所有真相 只要开始,就不会停止... 揭开唯一事实,外表是小孩,头脑却是大人 他的名字就叫...名侦探柯南! 描述 [CoVH07] OIBH组织派出的黄金十二人+青铜五小强还没 ...
- 【11分钟训练完ImageNet】DNN训练再破纪录,1024 CPU Caffe开源
此前,伯克利.TACC和UC戴维斯的研究人员使用新算法,在24分钟内训练完AlexNet,1小时训练完ResNet,创下了纪录.现在,他们继续推进,使用1024个CPU,在11分钟内训练完AlexNe ...
- SnnGrow快讯:Apple Books上线AI读书功能、有声书市场将迎来颠覆时刻、刚过7岁生日的OpenAI估值达到290亿美元、跻身全球独角兽排行榜前20、中国航天2023全年发射将再破60次
一.Apple Books上线AI读书功能,有声书市场将迎来颠覆时刻 卫报的记者发现,Apple 悄悄推出了人工智能讲述的语音书功能,可能标志着人类播音员时代终结的开始,也可能是科技公司试图颠覆有声读 ...
- 语音识别再破记录,这个领域究竟哪家强?
近日,一则题为"词错率2.97%:云从科技刷新语音识别世界纪录"文章进入大众的视野,文中的宣传"将错词率(Word Error Rate,WER)降到了惊人的2.97%, ...
- [最短路] [Vijos P1184] CoVH之华丽的IP伪装 (ConanIP)
这是一道神奇的题 这道题的题目说明全VJ最长- 这道题最让人看不懂- 这道题也是容易在CoVH模拟赛里卡死的一个- 所以,我(负责任地)把所有说明打上来(可能加上各种吐槽) Background 背景 ...
- 自研云原生数据仓库AnalyticDB再破权威评测TPC-DS世界纪录!
北京时间 2020/5/4 青年节,TPC(全球最知名非盈利的数据管理系统评测基准标准化组织)官网正式上线AnalyticDB TPC-DS成绩,AnalyticDB通过严苛的TPC-DS全流程测试, ...
- 自研云原生数据仓库AnalyticDB再破权威评测TPC-DS世界纪录
北京时间 2020/5/4 青年节,TPC(全球最知名非盈利的数据管理系统评测基准标准化组织)官网正式上线AnalyticDB TPC-DS成绩,AnalyticDB通过严苛的TPC-DS全流程测试, ...
- 跻身全球前十,金山云欲用AIoT再破局
近年来,作为中国最大的独立云服务商,金山云的发展可谓是又快又稳. "快"体现在金山云的营收快速增长.据国际数据公司 (IDC)首次发布<全球公有云服务市场(2018下半年)跟 ...
- 内容行业进入下半场,创作型平台如何再破局?
黑天鹅飞过之后,各个行业冰山下的支点开始露出水面. 2020年,这场把全国人民闷在家里大半年的疫情里,实体行业遭受到了无差别的致命攻击,而各类互联网产品则迎来了大规模增长.数据显示,无论是用户数量还是 ...
最新文章
- Linux命令学习总结:hexdump
- oracle数据源的报表sql计算慢解决
- java MDC_log4j MDC实现日志追踪
- 遇见那个对的人,便是爱情
- win10安装pip
- df -h 显示100%的解决办法
- 在logback、log4j等日志输出工具中输出java异常调用堆栈
- 【操作系统笔记】中断和异常
- drools rule (二) LHS语法详解
- ELK 收集多个日志文件
- 【图像融合】基于matlab高斯金字塔+拉普拉斯金字塔彩色水下图像融合【含Matlab源码 1629期】
- 咸鱼ZTMR实例—PS2手柄
- Pepper/Nao中级教程:第六章 Choregraphe写App时缺少Python lib库时如何解决
- C#软件绑定QQ群验证代码
- 腾讯云服务器配置jre、jdk、tomcat
- python 合并word文件_python读取word合并单元格
- CSS精灵技术与字体图标
- Lessonnbsp;52nbsp;Anbsp;prett…
- 与二分来一场美丽的邂逅
- 微软云Linux服务器 Mysql、tomcat远程连接错误解决办法