[Luogu] 八数码难题
https://www.luogu.org/problemnew/show/P1379
long long ago
暴力bfs
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <queue>
#include <cstring>
#include <string> using namespace std;
const string s_end = ""; struct Node {
string s;
int step;
};
queue <Node> Q1;
map <string, bool> mp;
string s_start;
int Step; inline void pd(string ss, int answer) {
if(ss == s_end) {
printf("%d",answer);
exit();
}
} inline void bfs() {
while(!Q1.empty()) {
Node topp = Q1.front();
Q1.pop();
string s1 = topp.s;
Step = topp.step;
int f = s1.find('');
Node nxt;
if(f == ) {
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
continue;
}
if(f == ) {
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
continue;
}
if(f == ) {
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
continue;
}
if(f == ) {
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
continue;
}
if(f == ) {
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
continue;
}
if(f == ) {
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
continue;
}
if(f == ) {
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
continue;
}
if(f == ) {
//4 7 6 7 8 7
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
continue;
}
if(f == ) {
//58 78
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
swap(s1[], s1[]);
swap(s1[], s1[]);
pd(s1, topp.step + );
if(!mp[s1]) {
nxt.s = s1;
nxt.step = topp.step + ;
Q1.push(nxt);
mp[s1] = ;
}
continue;
}
}
} int main() {
cin >> s_start;
Node now;
now.s = s_start;
now.step = ;
Q1.push(now);
bfs();
return ;
}
//
[Luogu] 八数码难题的更多相关文章
- [luogu]P1379 八数码难题[广度优先搜索]
八数码难题 ——!x^n+y^n=z^n 我在此只说明此题的一种用BFS的方法,因为本人也是初学,勉勉强强写了一个单向的BFS,据说最快的是IDA*(然而蒟蒻我不会…) 各位如果想用IDA*的可以看看 ...
- 双向广搜+hash+康托展开 codevs 1225 八数码难题
codevs 1225 八数码难题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Yours和zero在研究A*启 ...
- Codevs 1225 八数码难题
1225 八数码难题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description Yours和zero在研究A*启发式算法.拿到一道经典的 ...
- 洛谷P1379八数码难题
题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中. 要求解的问题是:给出一种初始布局(初始状态)和目标布局(为 ...
- 洛谷 P1379 八数码难题 解题报告
P1379 八数码难题 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初 ...
- 【洛谷P1379】八数码难题(广搜、A*)
八数码难题 题目描述 一.广搜: 首先要考虑用什么存每一个状态 显然每个状态都用一个矩阵存是很麻烦的. 我们可以考虑将一个3*3的矩阵用一个字符串或long long 存. 每次扩展时再转化为矩阵. ...
- 习题:八数码难题(双向BFS)
八数码难题(wikioi1225) [题目描述] 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出 ...
- 「LuoguP1379」 八数码难题(迭代加深
[P1379]八数码难题 - 洛谷 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种 ...
- 洛谷——P1379 八数码难题
P1379 八数码难题 双向BFS 原来双向BFS是这样的:终止状态与起始状态同时入队,进行搜索,只不过状态标记不一样而已,本题状态使用map来存储 #include<iostream> ...
随机推荐
- SAS学习笔记16 SAS创建计数(枚举)变量
- s5p6818 Overview
S5P6818: 64bit Octa-Core, High Performance, Advanced 3D Graphics, Full-HD Multimedia Video, A53 Core ...
- 学习C#自作计算器,菜鸟初学,有大神的指点,希望做的不够好的地方请大家多多指导。同时希望非常无聊的大神能加些其它计算进去
可以做幂运算,根号运算,十进制与二进制互转,16进制与十进制互转 namespace WindowsFormsApplication15 { public partial class 祥哥计算器 : ...
- ajax对数据删除、查看详情功能
运用bootstrap,jquery和ajax显示一些数据,附加删除功能并且点击能弹出模态框详情功能 主页面main.php <!DOCTYPE html PUBLIC "-//W3C ...
- el-table表格错误问题
.el-table--border th.gutter:last-of-type { display: block!important; width: 17px!important; } 如果不行,则 ...
- Golang内存管理
Golang 内存管理 原文链接[http://legendtkl.com/2017/04/02/golang-alloc/] Golang 的内存管理基于 tcmalloc,可以说起点挺高的.但是 ...
- 工作流引擎Activiti
背景: 在计算机尚未普及时,许多工作流程采用手工传递纸张表单的方式,一级一级审批签字, 工作效率非常低下,对于数据统计以及生成报表的功能,需要经过大量的手工操作才能实现. 随着电脑的普及,这些工作的参 ...
- cygwin_exception::open_stackdumpfile: Dumping stack trace to HttpServer.exe.stackdump错误
本来,我在Windows下使用Cygwin编译运行c程序,在执行*.exe时报出如题错误,我在Linux环境下使用gcc编译运行,则正常. 所以,当你无法解决上述问题时,换系统吧!
- C++ 语句函数再探
1. 表达式只计算,抛弃计算结果: 2. 空语句什么也不做: 3.switch case语句漏写break,将会从匹配到的情况开始执行,直到语句结束 int main() { ; i + ; //表达 ...
- bash功能——命令行编辑、内部命令 外部命令、命令补全 、命令历史、文件名通配符、命令别名
命令行编辑: Ctrl + a : 跳转到当前编辑行首 Ctrl + e:跳转到当前编辑行尾 # mkdir /home/dira /home/diab 像这种命令,/home/dira 和 /hom ...