问题描述

LG2578


题解

用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的更多相关文章

  1. [ZJOI2005]九数码游戏(BFS+hash)

    Solution 这题的话直接上BFS就可以了,因为要输出方案,所以我们要开一个pre数组记录前驱,最后输出就可以了. 对于状态的记录,一般都用哈希来存,但因为这道题比较特殊,它是一个排列,所以我们可 ...

  2. 洛谷 - P2578 - 九数码游戏 - bfs

    https://www.luogu.org/problemnew/show/P2578 一个挺搞的东西,用康托展开做记忆化搜索可以少一个log的查询. #include <bits/stdc++ ...

  3. [ZJOI2005]九数码游戏

    [ZJOI2005]九数码游戏 题目描述 输入输出格式 输入格式: 输入文件中包含三行三列九个数,同行的相邻两数用空格隔开,表示初始状态每个方格上的数字.初始状态不会是目标状态. 输出格式: 如果目标 ...

  4. 万圣节后的早晨&&九数码游戏——双向广搜

    https://www.luogu.org/problemnew/show/P1778 https://www.luogu.org/problemnew/show/P2578 双向广搜. 有固定起点终 ...

  5. LOJ #6436. 「PKUSC2018」神仙的游戏(字符串+NTT)

    题面 LOJ #6436. 「PKUSC2018」神仙的游戏 题解 参考 yyb 的口中的长郡最强选手 租酥雨大佬的博客 ... 一开始以为 通配符匹配 就是类似于 BZOJ 4259: 残缺的字符串 ...

  6. 洛谷 P2578 [ZJOI2005]九数码游戏【bfs+康托展开】

    只有9!=362880个状态,用康托展开hash一下直接bfs即可 #include<iostream> #include<cstdio> #include<cstrin ...

  7. 「LuoguP1379」 八数码难题(迭代加深

    [P1379]八数码难题 - 洛谷 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种 ...

  8. 「LuoguP2252」 取石子游戏(威佐夫博弈

    [P2252]取石子游戏 - 洛谷 题目背景 无 题目描述 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以 ...

  9. loj#6436. 「PKUSC2018」神仙的游戏(生成函数)

    题意 链接 Sol 生成函数题都好神仙啊qwq 我们考虑枚举一个长度\(len\).有一个结论是如果我们按\(N - len\)的余数分类,若同一组内的全为\(0\)或全为\(1\)(?不算),那么存 ...

随机推荐

  1. SQL Server 迁移数据库 (四)备份和还原

    1. 备份 2. 复制 3. 粘贴 4. 还原 截图软件出问题了,估计重启下就好,但是备份还原比较简单,懂的都懂,马上下班了就不贴图了.

  2. (三十一)golang--面向对象之工厂模式

    golang面向对象中是不存在构造函数的,可以使用工厂模式.   使用工厂模式,让即使不是大写的变量可以被外部包使用.

  3. centos 启动一个tcp服务程序

    需要先yum安装: yum install nc 启动服务: nc -l 80

  4. H3C S12508单板卡 通过bootware升级software版本

    H3C S12508单板卡 通过bootware升级software版本 案例:S12508更换主控板LST1MRPNC1 ,该板卡状态为Slave状态: 设备状态:S12508共2台做了堆叠,共含4 ...

  5. tf.ConfigProto()

    tf.ConfigProto一般用在创建session的时候用来对session进行参数配置 with tf.Session(config=tf.ConfigProto(...)...) tf.Con ...

  6. 配置每次git push 不需要输入账号密码

    配置每次git push 不需要输入账号密码 .gitconfig文件地址 C:\Users\Admin

  7. sitecore系列教程场所分类简介

    在Sitecore体验平台(XP)中,场所是可跟踪的离线交互发生的位置.这些是发生交互的物理位置,例如特定的零售场所或公共汽车站. 您可以使用场所分类记录特定交互发生的位置.此信息保存在体验数据库(x ...

  8. Review: Basic Knowledge about WebForm

    Asp.net shanzm

  9. 最简单取得外网IP

    #coding=utf-8import urllib2import re print re.search('\d+\.\d+\.\d+\.\d+',urllib2.urlopen("http ...

  10. Java多线程——查看线程堆栈信息

    Java多线程——查看线程堆栈信息 摘要:本文主要介绍了查看线程堆栈信息的方法. 使用Thread类的getAllStackTraces()方法 方法定义 可以看到getAllStackTraces( ...