//本代码还未ac#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define between(x, a, b) (a<=x && x<=b)
const int dir[4][2] = {1, 0, 0, 1, -1, 0, 0, -1};
const int N = 1e6 + 10;
int n, m, K;
int f[15], vis[N];struct node {string s="";int pos;//x的位置int step;
};int id(string s) { //一种哈希方式 变排列int res = 0;for (int i = 0; i < 9; ++i) {int d = 0;for (int j = 0; j < i; ++j) {if (s[j] > s[i]) d++;}res += d * f[i];}return res;
}int dfs(node st) {vis[id(st.s)] = 1;queue<node> q;q.push(st);while (!q.empty()) {auto u = q.front();q.pop();if (u.s == "123456789x") return u.step;if(vis[id(u.s)])continue;vis[id(u.s)]=1;int x = u.pos / 3;int y = u.pos % 3;for (int i = 0; i < 4; ++i) {int dx = x + dir[i][0];int dy = y + dir[i][1];if (between(dx, 0, 2) && between(dy, 0, 2)) {int now = dx * 3 + dy;swap(u.s[u.pos], u.s[now]);if (vis[id(u.s)]) continue;node v = {u.s, now, u.step + 1};q.push(v);swap(u.s[u.pos], u.s[now]);}}}return -1;
}int main() {ios::sync_with_stdio(0);f[0] = 1; //预处理 n!for (int i = 1; i <= 9; ++i) {f[i] = f[i - 1] * i;}string s;node start;for (int i = 0; i < 9; ++i) {cin >> s;if (s == "x") start.pos = i;start.s += s;}cout << dfs(start) << endl;return 0;
}

八码数 · 哈希+BFS相关推荐

  1. 八码数-IDA*算法

    A是用在BFS上的 A=优先队列+估价函数 IDA是用在DFS上的 IDA=迭代加深+估价函数 一般来说IDA优于A主要在A的BSF内存的需求,且不需要对启发值排序.我是更喜欢用IDA*. IDA*相 ...

  2. 关于八码数问题有解与无解的证明

    转载自[水木清华BBS精华区]:http://www.cnw3.org/smth/AI/5/8/00000001.htm 发信人: YourMajesty (花痴~~~~小魔男), 信区: AI 标 ...

  3. hdu 3567(八码数 + 双向bfs)

    题目连接:https://vjudge.net/contest/353606#problem/B 参考文章:https://blog.csdn.net/laaahu/article/details/9 ...

  4. 算法导论(八)--全域哈希

    算法导论(八)--全域哈希 全域哈希的定义 构造全域哈希的方法 完全哈希 全域哈希的定义 哈希有一个根本的缺陷,对于任意哈希函数而言,都存在一个不好的键集,所有键都会哈希到同一个槽,这样如果有人知道你 ...

  5. 转载一篇《Redis源码研究—哈希表》重点是如何重新哈希

    <Redis源码研究-哈希表>来自:董的博客 网址:http://dongxicheng.org/nosql/redis-code-hashtable/ 转载于:https://www.c ...

  6. 矩阵键盘数 码管显示多位数 c语言,矩阵键盘控制码数管.doc

    矩阵键盘控制码数管 江苏食品职业技术学院论文 系别 机电工程系 班级 机电101 姓名 李明 学号 0401101223 目录 摘要3 1.概述3 2.总体设计方案3 2.1总体设计要求3 2.2系统 ...

  7. Python爬取京东回力鞋购买情况看看码数比例

    背景 突然想起前阵子看到一篇爬bar并统计女生罩杯情况的文章,心想.我擦,这么好的题材让别人先写了我风暴哭泣.心想,算了,人家本来就比我优秀.然后随便去京东逛了逛.看到回力旗舰店给我推了,那我也来搞搞 ...

  8. C语言结构体工资缴税,C语言进阶-第11~13讲:结构体实践(成绩处理个税计算器之码数分离)...

    任务和代码(一): 成绩处理 /* *All rights reserved *文件名称:main.c *作者: Osseyda *完成日期:2017.11.6 *版本号:v2. * *问题描述:定义 ...

  9. 英国w l 是什么码数_英国广播公司的完整形式是什么?

    英国w l 是什么码数 英国广播公司:英国广播公司 (BBC: British Broadcasting Corporation) BBC is an abbreviation of British ...

最新文章

  1. Kaggle知识点:数据分析思路与工具(EDA)
  2. NIO 之 Channel实现原理
  3. 日语python怎么说_python+Mecab,一次性学会日语分词
  4. 局域网聊天的本质是函数
  5. HTTP协议发展历程
  6. CCF201512-1 数位之和
  7. (二)Netty之IO模型
  8. mysql升级到5.7版本后,运行程序报错this is incompatible with sql_mode=only_full_group_by
  9. Python自省(反射)指南 1
  10. 干掉 SQL 中的 like,我用 es 后运营小姐姐们都说好快!
  11. 神经网络入门之RNN(三)
  12. 【图像分割】基于matlab模糊聚类算法FCM图像分割【含Matlab源码 084期】
  13. Android学习别“走弯路”,移动端混合开发框架
  14. 计算机局域网地址设置方法,怎么设置局域网电脑的ip地址和DNS?
  15. R语言:基本变量及其之间关系探索分析
  16. 张勇用最严厉的内部信,敲打阿里云,也在提振阿里士气
  17. 安卓 OpenGLES 魔方
  18. 信创-东方通和达梦适配
  19. 单片机的智能垃圾桶设计
  20. 新机如何把机械硬盘中的系统克隆到固态硬盘

热门文章

  1. DBTC——流动性、使用人数自我驱动增长的分叉币
  2. 【CSDN 2021 年度总结】半年涨粉11万,铁杵磨成针
  3. 斯密斯圆图-学习笔记
  4. 知乎大佬图文并茂的epoll讲解,看不懂的去砍他
  5. 在pycharm中如何使用新的库文件覆盖旧的cv2安装失败的问题
  6. Python机器学习实战:掌握这四个特征选择方法,提升模型预测性能
  7. 初一年级上学期计算机课知识总结,在电脑上学习七年级上册课程
  8. Windows10任务栏的声音、网络图标左键无反应,右键可正常打开
  9. byte和bit的区别,字节和比特,1兆等于多少字节,等于多少比特
  10. 【MPS】Jetbrains MPS入门案例Shapes(二)