[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> ...
随机推荐
- 不遮挡人物弹幕是怎么实现的——图片蒙版效果-webkit-mask
这是一个实验中的功能,用于设置元素上遮罩层的图像. 一.Values none:默认值,透明的黑色图像层,也就是没有遮罩层. <mask-source>:<mask>或CSS图 ...
- CentOS 系统下使用 yum 安装 Redis
本文主要介绍在 CentOS 7 系统下使用 yum 安装 Redis 的过程. 更改 yum 源 将 Centos 的 yum 源更换为国内的阿里云源. 首先备份你的原镜像文件,保证出错后可以恢复: ...
- JSP JSONArray使用遇坑!添加以下6个jar包
1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons ...
- 【原创】大叔经验分享(87)marathon重启应用过程服务不可用
marathon提供多种健康检查方式 常用的有TCP和HTTP, TCP检查端口是否存在,存在则认为实例健康: HTTP检查指定URL的HTTP返回码,返回码正常(2xx.3xx)则认为实例健康: 这 ...
- clipboard兼容各个浏览器,不需要设置权限
解决方案:用clipboard.js插件 注意要引用clipboard.js文件 案例: 将文本赋值给剪切板 <button class="btn">Copy</ ...
- centos搭建集群
centos 搭建集群步骤 1.使用yum安装所需要的工具 yum -y install wget vim tcl gcc make 2.下载redis并解压 cd /usr/local wget h ...
- 06 Windows编程——设备句柄 和 WM_PAINT消息
windows程序在现实方式上属于图形方式,和文字方式的显示,有显著的不同. 什么是设备句柄,如何获取 使用统一的数据结构表示某一设备,这个结构就是设备句柄. 源码 #include<Windo ...
- 数组和集合转化 array与list
package com.chen.test; import java.io.Serializable;import java.util.Arrays;import java.util.List;imp ...
- Centos 升级至 OpenSSH 8 rpm包制作
背景 安全部门扫描系统漏洞,OpenSSH 7.9出现漏洞,需升级到8. 使用 rpmbuild 将源码包编译为 rpm包. yum install rpm-build zlib-devel open ...
- RT-Thread--简介
RT-Thread 概述 RT-Thread,全称是 Real Time-Thread,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行,但并不是真正的同时运行,而是宏 ...