LG2578 「ZJOI2005」九数码游戏 bfs
问题描述
题解
用string+map去重。
bfs即可。
\(\mathrm{Code}\)
#include<bits/stdc++.h>
using namespace std;
void read(int &x){
x=0;char ch=1;int fh;
while(ch!='-'&&(ch>'9'||ch<'0')) ch=getchar();
if(ch=='-') ch=getchar(),fh=-1;
else fh=1;
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+ch-'0',ch=getchar();
x*=fh;
}
string que[1000003];
int f,r;
map<string,bool>s;
int pre[1000003];
void change1(string &s){
string bf="";
bf+=s[3];
bf+=s[0];
bf+=s[1];
bf+=s[6];
bf+=s[4];
bf+=s[2];
bf+=s[7];
bf+=s[8];
bf+=s[5];
s=bf;
}
void change2(string &s){
string bf="";
bf+=s[0];
bf+=s[1];
bf+=s[2];
bf+=s[5];
bf+=s[3];
bf+=s[4];
bf+=s[6];
bf+=s[7];
bf+=s[8];
s=bf;
}
void println(string s){
int cnt=0;
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
printf("%d ",s[cnt]-'0');++cnt;
}
puts("");
}
}
void readln(string &s){
char c;int x;
for(int i=1;i<=3;i++){
for(int j=1;j<=3;j++){
read(x);
c=(char)(x+'0');
s+=c;
}
}
}
void endit(int x){
int p=x;stack<int>st;int zzkakioi=0;
while(p){
st.push(p);zzkakioi++;
p=pre[p];
}
--zzkakioi;
printf("%d\n",zzkakioi);
while(st.size()){
int x=st.top();
println(que[x]);
puts("");
st.pop();
}
exit(0);
}
bool check(string s){
return s=="012345678";
}
int main(){
readln(que[f=r=1]);
s[que[1]]=1;
while(f<=r){
string x=que[f];
if(check(x)) endit(f);
change1(x);
if(s[x]==0){
s[x]=1;++r;
que[r]=x;pre[r]=f;
}
x=que[f];
change2(x);
if(s[x]==0){
s[x]=1;++r;
que[r]=x;pre[r]=f;
}
++f;
}
puts("UNSOLVABLE");
return 0;
}
LG2578 「ZJOI2005」九数码游戏 bfs的更多相关文章
- [ZJOI2005]九数码游戏(BFS+hash)
Solution 这题的话直接上BFS就可以了,因为要输出方案,所以我们要开一个pre数组记录前驱,最后输出就可以了. 对于状态的记录,一般都用哈希来存,但因为这道题比较特殊,它是一个排列,所以我们可 ...
- 洛谷 - P2578 - 九数码游戏 - bfs
https://www.luogu.org/problemnew/show/P2578 一个挺搞的东西,用康托展开做记忆化搜索可以少一个log的查询. #include <bits/stdc++ ...
- [ZJOI2005]九数码游戏
[ZJOI2005]九数码游戏 题目描述 输入输出格式 输入格式: 输入文件中包含三行三列九个数,同行的相邻两数用空格隔开,表示初始状态每个方格上的数字.初始状态不会是目标状态. 输出格式: 如果目标 ...
- 万圣节后的早晨&&九数码游戏——双向广搜
https://www.luogu.org/problemnew/show/P1778 https://www.luogu.org/problemnew/show/P2578 双向广搜. 有固定起点终 ...
- LOJ #6436. 「PKUSC2018」神仙的游戏(字符串+NTT)
题面 LOJ #6436. 「PKUSC2018」神仙的游戏 题解 参考 yyb 的口中的长郡最强选手 租酥雨大佬的博客 ... 一开始以为 通配符匹配 就是类似于 BZOJ 4259: 残缺的字符串 ...
- 洛谷 P2578 [ZJOI2005]九数码游戏【bfs+康托展开】
只有9!=362880个状态,用康托展开hash一下直接bfs即可 #include<iostream> #include<cstdio> #include<cstrin ...
- 「LuoguP1379」 八数码难题(迭代加深
[P1379]八数码难题 - 洛谷 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种 ...
- 「LuoguP2252」 取石子游戏(威佐夫博弈
[P2252]取石子游戏 - 洛谷 题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以 ...
- loj#6436. 「PKUSC2018」神仙的游戏(生成函数)
题意 链接 Sol 生成函数题都好神仙啊qwq 我们考虑枚举一个长度\(len\).有一个结论是如果我们按\(N - len\)的余数分类,若同一组内的全为\(0\)或全为\(1\)(?不算),那么存 ...
随机推荐
- git 关联vs code
{ "window.zoomLevel": 1, "editor.fontSize": 15, "gitlens.advanc ...
- <Tree> 337 BFS: 103
337. House Robber III 每个结点有两个结果: 1. result[ 0 ], 不偷, 需要加上子节点的最大值,left[ 0 ] , left[ 1 ] 的最大值 + right ...
- vue数据更改视图不更新问题----深入响应式原理
Vue响应式原理之官方解释 当你把一个普通的JavaScript对象传给Vue实例的data选项,Vue将遍历此对象所有的属性,并使用Object.defineProperty把这些属性全部转为get ...
- LINQ之 Join 与 GroupJoin
声明:本文为www.cnc6.cn原创,转载时请注明出处,谢谢! 一.编写Person与City类,如下: class Person { public int CityID { set; get; } ...
- Django学习笔记(16)——扩展Django自带User模型,实现用户注册与登录
一,项目题目:扩展Django自带User模型,实现用户注册与登录 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统.此时我们需要实现包括用户注册,登录,用户认证,注销,修改密码等功能. ...
- WPF 鼠标移动时触发图片旋转(非动画)
非动画,只是简单的触发器. 主要是针对旋转的写法. 代码 <Grid> <Image x:Name="image" Source="nifi3.gif& ...
- WPF ToggleButton Style
<Style x:Key="ArrowToggleStyle" TargetType="ToggleButton"> <Setter Prop ...
- C++ 在线编译器(支持 C++11)
C++11 的 Inheriting constructors 特性在 GCC 4.8 以前的版本及 VS2013 中都没有支持,测试起来比较麻烦,所以搜集到了几个支持 GCC 4.8 及更高版本的在 ...
- IIS_CVE-2017-7269 IIS6.0远程代码执行漏洞复现
CVE-2017-7269 IIS6.0远程代码执行漏洞复现 一.漏洞描述 IIS 6.0默认不开启WebDAV,一旦开启了WebDAV,安装了IIS6.0的服务器将可能受到该漏洞的威胁. 二.影响版 ...
- 在Edge Chromium中启用简体中文界面
Edge Chromium用了一阵子了,整体上还算比较好用的,由于可以直接使用chrome的扩展,基本上体验和chrome差不多,就是界面上不支持中文有点小不爽. 在Edge Chrome更新到77后 ...