[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> ...
随机推荐
- PHP的 parse_ini_file 解析配置文件
解析配置文件: parse_ini_file 类似解析php.ini文件样 配置文件内容如下: Example #1 sample.ini 的内容 ; This is a sample configu ...
- poj 2406 求最短重复字串
题解: KMP中next数组的巧妙运用.在这里我们假设这个字符串的长度是len,那么如果len可以被len-next[len]整除的话,我们就可以说len-next[len]就是那个最短子串的长度为什 ...
- (八)Redis之持久化之AOF方式
一.概念 AOF方式:将以日志,记录每一个操作 优势:安全性相对RDB方式高很多: 劣势:效率相对RDB方式低很多: 二.案例 appendonly no默认关闭aof方式 我们修改成yes 就开启 ...
- c#基础知识梳理(二)
上期回顾 - https://www.cnblogs.com/liu-jinxin/p/10818256.html 一.变量 一个变量只不过是一个供程序操作的存储区的名字.在 C# 中,每个变量都有一 ...
- JAVA文件IO总结
文件流的操作有两种:字节流.字符流 字节流:FileInputStream,FileInputStream 字符流:InputStreamReader,OutputStreamReader 这两种流对 ...
- ajax对数据删除、查看详情功能
运用bootstrap,jquery和ajax显示一些数据,附加删除功能并且点击能弹出模态框详情功能 主页面main.php <!DOCTYPE html PUBLIC "-//W3C ...
- vue的$nextTick使用后的js代码执行顺序问题
一.问题产生背景: 父组件已经获得子组件实例,并能直接触发子组件的方法,在父组件中调用了子组件的两个方法 // 父组件调用子组件,this.picker是获取的子组件整个实例,先调用update,再调 ...
- BeginInvoke异步线程
this.BeginInvoke(new Action(() => { dataGridView1.DataSource = BLLBillConsume.BllGetClearMarketLo ...
- bash shell的ANSI控制
格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo -e "\033[41;36m something here \03 ...
- linux /etc/shadow文件详解
struct spwd { char *sp_namp; /* user login name */ char *sp_pwdp; /* encrypted password */ long int ...