题目连接

#define _CRT_SECURE_NO_WARNINGS
#include<cstdio>
#include<iostream>
#include<queue>
#include<cmath>
#include<set>
#include<cstring>
using namespace std;
char s[4][4], e[4][4];
char a[10];
struct point {
int x, y;
char status[4][4];
int cnt = 0;
point() {
};
point(int x, int y, char s[4][4] , int cnt) {
this->x = x; this->y = y;
for (int i = 0; i<3; i++)
for (int j = 0; j<3; j++) {
this->status[i][j] = s[i][j];
}
this->cnt = cnt;
}
}p;
int ll;
int dx[4] = { 0,1,0,-1 };
int dy[4] = { -1,0,1,0 };
bool is_ok(int x, int y) {
if (x<0 || x>2 || y<0 || y>2)return false;
return true;
}
bool check(char(*s)[4], char(*e)[4]) {
for (int i = 0; i<3; i++)
for (int j = 0; j<3; j++) {
if (s[i][j] != e[i][j])return false;
}
return true;
}
queue<point>que;
set<int>vis;
bool change(char (*s)[4]) { int ans = 0;
for (int i = 0; i < 3; i++)
for(int j=0;j<3;j++){
if (s[i][j] == '.')ans = ans * 10;
else ans = ans * 10 + s[i][j] - '0';
}
if (vis.count(ans)) //容器中有相同
{
return 0;
}
vis.insert(ans);//插入容器
return 1;
}
void bfs() {
char temp[4][4];
while (!que.empty()) {
p = que.front();
que.pop();
if (check(p.status,e)) {
cout << p.cnt << endl;
return;
}
for (int i = 0; i<4; i++) {
int x = p.x + dx[i];
int y = p.y + dy[i];
if (is_ok(x, y)) {
memcpy(temp, p.status,sizeof(temp));
temp[p.x][p.y] = temp[x][y];
temp[x][y] = '.';
if (change(temp)) {
que.push(point(x, y, temp, p.cnt + 1));
} }
}
}
}
int main() {
scanf("%s", a);
int c = 0;
int dxx, dyy;
for (int i = 0; i<3; i++)
for (int j = 0; j<3; j++) {
if (a[c] == '.') {
dxx = i, dyy= j;
}
s[i][j] = a[c++];
}
que.push(point(dxx, dyy, s, 0));
change(s);
c = 0;
scanf("%s", a);
for (int i = 0; i<3; i++)
for (int j = 0; j<3; j++) {
e[i][j] = a[c++];
}
bfs();
return 0;
}

蓝桥杯九宫重排(bfs+用set去重)的更多相关文章

  1. 蓝桥杯 穿越雷区(bfs)

    题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废.某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? ...

  2. 蓝桥杯 卡片换位(bfs)

    卡片换位 你玩过华容道的游戏吗?这是个类似的,但更简单的游戏.看下面 3 x 2 的格子 在其中放5张牌,其中A代表关羽,B代表张飞,* 代表士兵.还有一个格子是空着的. 你可以把一张牌移动到相邻的空 ...

  3. 2017蓝桥杯九宫幻方(C++B组)

    题目:九宫幻方    小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对角线的和都是相同的. ...

  4. Java实现蓝桥杯 九宫幻方

    九宫幻方 D: 今天做一道题目 九宫幻方 小明最近在教邻居家的小朋友小学奥数,而最近正好讲述到了三阶幻方这个部分. 三阶幻方指的是将1~9不重复的填入一个3*3的矩阵当中,使得每一行.每一列和每一条对 ...

  5. 蓝桥杯 调手表(bfs解法)

    小明买了块高端大气上档次的电子手表,他正准备调时间呢. 在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时 ...

  6. 蓝桥杯比赛关于 BFS 算法总结方法以及套路分析

    首先我们来看几道java A组的题目,都是同一年的哦!!! 搭积木 小明最近喜欢搭数字积木,一共有10块积木,每个积木上有一个数字,0~9. 搭积木规则:每个积木放到其它两个积木的上面,并且一定比下面 ...

  7. ALGO-39_蓝桥杯_算法训练_数组排序去重

    问题描述 输入10个整数组成的序列,要求对其进行升序排序,并去掉重复元素. 输入格式 10个整数. 输出格式 多行输出,每行一个元素. 样例输入 样例输出 解题思路: 若输入的数字存在数组中,剔除,否 ...

  8. 蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)

    Description 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...

  9. 2013年第四届蓝桥杯国赛 九宫重排(HashMap+双BFS优化)

    九宫重排     时间限制:1.0s   内存限制:256.0MB 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干 ...

随机推荐

  1. PHP微信公众号JSAPI网页支付(上)

    一.使用场景以及说明 使用场景:商户已有H5商城网站,用户通过消息或扫描二维码在微信内打开网页时,可以调用微信支付完成下单购买的流程. 说明:1.用户打开图文消息或者扫描二维码,在微信内置浏览器打开网 ...

  2. Leetcode#70. Climbing Stairs(爬楼梯)

    题目描述 假设你正在爬楼梯.需要 n 阶你才能到达楼顶. 每次你可以爬 1 或 2 个台阶.你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数. 示例 1: 输入: 2 输出: 2 解 ...

  3. js限制字符串长度,超出的部分补...

    value?(value.length>12?(value.substring(0,12))+"...":value):""

  4. 编译Android ROM环境搭建

    环境搭建 1 安装ubuntu 推荐12.04或13.10 2 安装jdk7和一些所需要的包安装jdk7$ sudo apt-get update$ sudo apt-get install open ...

  5. Beta冲刺(4/7)

    目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(4/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 ppt模板 接下来的计划 做好机动. ...

  6. web富文本编辑器收集

    1.UEditor 百度的. 优点:插件多,基本满足各种需求,类似贴吧中的回复界面. 缺点:不再维护,文档极少,使用并不普遍,图片只能上传到本地服务器,如果需要上传到其他服务器需要改动源码,较为难办, ...

  7. 【原创】大叔经验分享(14)spark on yarn提交任务到集群后spark-submit进程一直等待

    spark on yarn通过--deploy-mode cluster提交任务之后,应用已经在yarn上执行了,但是spark-submit提交进程还在,直到应用执行结束,提交进程才会退出,有时这会 ...

  8. React native 无法弹出调试控件的问题

    React Native 在debug模式下,可以通过摇动手机,弹出调试选项.但是今天利用了cocoapods 把react native 文件整理后,调试界面就弹不出了,其他功能正常.查了好久,发现 ...

  9. 清北-Day6-regular

    题目描述 给出一个只包含左括号和右括号的字符串,插入若干左右括号(可以插在任意位置)之后使得字符串长度为$ 2\times n $ 且是一个合法的括号序列.求最后能组成多少种不同的合法括号序列. [合 ...

  10. git remote: HTTP Basic: Access denied Mac 使用Sourcetree 密码输错 再次输入解决方案

    删除下面的key即可