八码数 · 哈希+BFS
//本代码还未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相关推荐
- 八码数-IDA*算法
A是用在BFS上的 A=优先队列+估价函数 IDA是用在DFS上的 IDA=迭代加深+估价函数 一般来说IDA优于A主要在A的BSF内存的需求,且不需要对启发值排序.我是更喜欢用IDA*. IDA*相 ...
- 关于八码数问题有解与无解的证明
转载自[水木清华BBS精华区]:http://www.cnw3.org/smth/AI/5/8/00000001.htm 发信人: YourMajesty (花痴~~~~小魔男), 信区: AI 标 ...
- hdu 3567(八码数 + 双向bfs)
题目连接:https://vjudge.net/contest/353606#problem/B 参考文章:https://blog.csdn.net/laaahu/article/details/9 ...
- 算法导论(八)--全域哈希
算法导论(八)--全域哈希 全域哈希的定义 构造全域哈希的方法 完全哈希 全域哈希的定义 哈希有一个根本的缺陷,对于任意哈希函数而言,都存在一个不好的键集,所有键都会哈希到同一个槽,这样如果有人知道你 ...
- 转载一篇《Redis源码研究—哈希表》重点是如何重新哈希
<Redis源码研究-哈希表>来自:董的博客 网址:http://dongxicheng.org/nosql/redis-code-hashtable/ 转载于:https://www.c ...
- 矩阵键盘数 码管显示多位数 c语言,矩阵键盘控制码数管.doc
矩阵键盘控制码数管 江苏食品职业技术学院论文 系别 机电工程系 班级 机电101 姓名 李明 学号 0401101223 目录 摘要3 1.概述3 2.总体设计方案3 2.1总体设计要求3 2.2系统 ...
- Python爬取京东回力鞋购买情况看看码数比例
背景 突然想起前阵子看到一篇爬bar并统计女生罩杯情况的文章,心想.我擦,这么好的题材让别人先写了我风暴哭泣.心想,算了,人家本来就比我优秀.然后随便去京东逛了逛.看到回力旗舰店给我推了,那我也来搞搞 ...
- C语言结构体工资缴税,C语言进阶-第11~13讲:结构体实践(成绩处理个税计算器之码数分离)...
任务和代码(一): 成绩处理 /* *All rights reserved *文件名称:main.c *作者: Osseyda *完成日期:2017.11.6 *版本号:v2. * *问题描述:定义 ...
- 英国w l 是什么码数_英国广播公司的完整形式是什么?
英国w l 是什么码数 英国广播公司:英国广播公司 (BBC: British Broadcasting Corporation) BBC is an abbreviation of British ...
最新文章
- Kaggle知识点:数据分析思路与工具(EDA)
- NIO 之 Channel实现原理
- 日语python怎么说_python+Mecab,一次性学会日语分词
- 局域网聊天的本质是函数
- HTTP协议发展历程
- CCF201512-1 数位之和
- (二)Netty之IO模型
- mysql升级到5.7版本后,运行程序报错this is incompatible with sql_mode=only_full_group_by
- Python自省(反射)指南 1
- 干掉 SQL 中的 like,我用 es 后运营小姐姐们都说好快!
- 神经网络入门之RNN(三)
- 【图像分割】基于matlab模糊聚类算法FCM图像分割【含Matlab源码 084期】
- Android学习别“走弯路”,移动端混合开发框架
- 计算机局域网地址设置方法,怎么设置局域网电脑的ip地址和DNS?
- R语言:基本变量及其之间关系探索分析
- 张勇用最严厉的内部信,敲打阿里云,也在提振阿里士气
- 安卓 OpenGLES 魔方
- 信创-东方通和达梦适配
- 单片机的智能垃圾桶设计
- 新机如何把机械硬盘中的系统克隆到固态硬盘