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\)(?不算),那么存 ...
随机推荐
- SQL Server 迁移数据库 (四)备份和还原
1. 备份 2. 复制 3. 粘贴 4. 还原 截图软件出问题了,估计重启下就好,但是备份还原比较简单,懂的都懂,马上下班了就不贴图了.
- (三十一)golang--面向对象之工厂模式
golang面向对象中是不存在构造函数的,可以使用工厂模式. 使用工厂模式,让即使不是大写的变量可以被外部包使用.
- centos 启动一个tcp服务程序
需要先yum安装: yum install nc 启动服务: nc -l 80
- H3C S12508单板卡 通过bootware升级software版本
H3C S12508单板卡 通过bootware升级software版本 案例:S12508更换主控板LST1MRPNC1 ,该板卡状态为Slave状态: 设备状态:S12508共2台做了堆叠,共含4 ...
- tf.ConfigProto()
tf.ConfigProto一般用在创建session的时候用来对session进行参数配置 with tf.Session(config=tf.ConfigProto(...)...) tf.Con ...
- 配置每次git push 不需要输入账号密码
配置每次git push 不需要输入账号密码 .gitconfig文件地址 C:\Users\Admin
- sitecore系列教程场所分类简介
在Sitecore体验平台(XP)中,场所是可跟踪的离线交互发生的位置.这些是发生交互的物理位置,例如特定的零售场所或公共汽车站. 您可以使用场所分类记录特定交互发生的位置.此信息保存在体验数据库(x ...
- Review: Basic Knowledge about WebForm
Asp.net shanzm
- 最简单取得外网IP
#coding=utf-8import urllib2import re print re.search('\d+\.\d+\.\d+\.\d+',urllib2.urlopen("http ...
- Java多线程——查看线程堆栈信息
Java多线程——查看线程堆栈信息 摘要:本文主要介绍了查看线程堆栈信息的方法. 使用Thread类的getAllStackTraces()方法 方法定义 可以看到getAllStackTraces( ...