问题 1426: [蓝桥杯][历届试题]九宫重排

时间限制: 1Sec 内存限制: 128MB 提交: 215 解决: 47

题目描述

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

我们把第一个图的局面记为:12345678. 
把第二个图的局面记为:123.46758 
显然是按从上到下,从左到右的顺序记录数字,空格记为句点。 
本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。

输入
输入第一行包含九宫的初态,第二行包含九宫的终态。 
输出
输出最少的步数,如果不存在方案,则输出-1。
样例输入
12345678.
123.46758
样例输出
3

实现代码如下:
(我用了string来记录已经出现过的排列情况,应该用其它方法储存速度会更快)

#include<string.h>
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<string>s;
string arr[200000];
int front=0;int rear=0;
int dis[200000]={0};
int pos=0;
string beg,des;
cin>>beg>>des;
if(beg==des){cout<<0<<endl;return 0;
}
s.insert(beg);int dalta[4]={-1,1,-3,3};
arr[front]=beg;
while(front<=rear)
{
beg=arr[front];
for(pos=0;pos<9;pos++)if(beg[pos]=='.')break;
for(int i=0;i<4;i++)
{
if(pos==0||pos==1||pos==2)if(i==2)continue;
if(pos==6||pos==7||pos==8)if(i==3)continue;
if(pos==0||pos==3||pos==6)if(i==0)continue;
if(pos==2||pos==5||pos==8)if(i==1)continue;
int p=pos+dalta[i];
char c=beg[pos];beg[pos]=beg[p];beg[p]=c;
if(s.count(beg)==0)
{
s.insert(beg);
arr[++rear]=beg;dis[rear]=dis[front]+1;
if(beg==des)
{
cout<<dis[front]+1<<endl;return 0;
}
}
c=beg[pos];beg[pos]=beg[p];beg[p]=c;
}
front++;
}
cout<<-1<<endl;return 0;
}


BFS解决九宫重排问题的更多相关文章

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

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

  2. 算法笔记_183:历届试题 九宫重排(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成 ...

  3. 九宫重排_康拓展开_bfs

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

  4. 蓝桥杯OJ PREV-19 九宫重排

    题目描写叙述:   历届试题 九宫重排   时间限制:1.0s   内存限制:256.0MB        问题描写叙述 如以下第一个图的九宫格中,放着 1~8 的数字卡片.另一个格子空着.与空格子相 ...

  5. [LeetCode] BFS解决的题目

    一.130  Surrounded Regions(https://leetcode.com/problems/surrounded-regions/description/) 题目: 解法: 这道题 ...

  6. 有关dfs、bfs解决迷宫问题的个人见解

    可以使用BFS或者DFS方法解决的迷宫问题! 题目如下: kotori在一个n*m迷宫里,迷宫的最外层被岩浆淹没,无法涉足,迷宫内有k个出口.kotori只能上下左右四个方向移动.她想知道有多少出口是 ...

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

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

  8. 蓝桥杯九宫重排(bfs+用set去重)

    题目连接 #define _CRT_SECURE_NO_WARNINGS #include<cstdio> #include<iostream> #include<que ...

  9. leetcode-78-子集(用bfs解决)

    题目描述: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3],   [1] ...

随机推荐

  1. [git] git error: unable to unlink old

    今天git pull ,结果报错 :   git error: unable to unlink old 原因是   文件夹内 一个exe 处于打开状态. 哈哈哈哈,又是个低级错误~~~ 下次注意呀~

  2. python函数篇0-1

    创建类和对象 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用. 类就是一个模板,模板里可以包含多个函数, ...

  3. QObject::connect可以对不继承QObject的类也使用信号槽

    #include <QCoreApplication>#include <QDebug>#include <QObject>#include <QThread ...

  4. Asp.net core Enum as string + ef core value convertor

    更新 : 2019-06-08 build in convertor https://docs.microsoft.com/en-us/ef/core/modeling/value-conversio ...

  5. Collections 类和Arrays类常用方法详解

    1:Collections类 max(Collection <? extends T> coll):根据元素的自然顺序,返回给定集合元素中的最大元素 min(Collection < ...

  6. JS基础_关系运算符

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  7. ui组件库

    基于Vue的Quasar Framework 中文网 http://www.quasarchs.com/ quasarframework/quasar: Quasar Frameworkhttps:/ ...

  8. 6 java 笔记

    1 java的类通过构造器来创建该类的对象 2 java提供extends关键字来实现子类继承父类 3 初始化块总是在构造器调用之前被执行 4 可以吧java中的类当成一种自定义的类型 5 类定义的变 ...

  9. webconfig中的&符号问题解决

    第一种解决方案 解决方法是将“&”,用“*”代替,取的时候再替换 第二种解决方案 用“&”替换“&”

  10. layDate面板出现红色花纹图案

    要使用layDate,有两种方法: 1. 要么在引用layui.js和layui.css,然后通过layui.use('laydate', callback) 加载模块后,调用方法使用. 2. 去la ...