BFS解决九宫重排问题
问题 1426: [蓝桥杯][历届试题]九宫重排
时间限制: 1Sec 内存限制: 128MB 提交: 215 解决: 47
如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。

我们把第一个图的局面记为:12345678.
把第二个图的局面记为:123.46758
显然是按从上到下,从左到右的顺序记录数字,空格记为句点。
本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-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解决九宫重排问题的更多相关文章
- 2013年第四届蓝桥杯国赛 九宫重排(HashMap+双BFS优化)
九宫重排 时间限制:1.0s 内存限制:256.0MB 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干 ...
- 算法笔记_183:历届试题 九宫重排(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成 ...
- 九宫重排_康拓展开_bfs
历届试题 九宫重排 时间限制:1.0s 内存限制:256.0MB 问题描述 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可 ...
- 蓝桥杯OJ PREV-19 九宫重排
题目描写叙述: 历届试题 九宫重排 时间限制:1.0s 内存限制:256.0MB 问题描写叙述 如以下第一个图的九宫格中,放着 1~8 的数字卡片.另一个格子空着.与空格子相 ...
- [LeetCode] BFS解决的题目
一.130 Surrounded Regions(https://leetcode.com/problems/surrounded-regions/description/) 题目: 解法: 这道题 ...
- 有关dfs、bfs解决迷宫问题的个人见解
可以使用BFS或者DFS方法解决的迷宫问题! 题目如下: kotori在一个n*m迷宫里,迷宫的最外层被岩浆淹没,无法涉足,迷宫内有k个出口.kotori只能上下左右四个方向移动.她想知道有多少出口是 ...
- 蓝桥杯 历届试题 九宫重排 (bfs+康托展开去重优化)
Description 如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着.与空格子相邻的格子中的卡片可以移动到空格中.经过若干次移动,可以形成第二个图所示的局面. 我们把第一个图的 ...
- 蓝桥杯九宫重排(bfs+用set去重)
题目连接 #define _CRT_SECURE_NO_WARNINGS #include<cstdio> #include<iostream> #include<que ...
- leetcode-78-子集(用bfs解决)
题目描述: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3], [1] ...
随机推荐
- Q函数的使用
""" Q函数的使用"""# 查询username 或者nicjname 都为zhangsan 的用户# user_list = Weibo ...
- 5.Shell变量
5.Shell变量本章介绍 shell 中所使用的变量.Bash 会自动给其中一些变量赋默认值.5.1 波恩Shell的变量Bash 使用一些和波恩 shell 同样的变量.有时,Bash 会给它赋默 ...
- 阿里云自动获取token值(python)
一,token说明 token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识.当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上这个 ...
- 【原创】大数据基础之Logstash(6)mongo input
logstash input插件之mongodb是第三方的,配置如下: input { mongodb { uri => 'mongodb://mongo_server:27017/db' pl ...
- java实现spark常用算子之ReduceByKey
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaPairRDD;import org.apache.spa ...
- CSS3总结三:文字(text)/字体、文本、文本装饰、多列
Text-Decoration text-shadow text-decoration Font font font-face Text 常用Text属性 Multi-column Multi-col ...
- macbook打印出现乱码解决方案
系统偏好设置 --> 打印机与扫描仪 --> + (左下角的加号) --> IP --> 输入打印机的ip地址,然后最下面的 “使用选择” 中选中 普通PCL 打印机,(默认的 ...
- vue数组中数据变化但是视图没有更新解决方案
原文链接:http://www.cnblogs.com/sufubo/p/6906261.html#undefined 问题:在vue项目中,我更改数组中的某一条数据,直接arr[i]=newVal ...
- OSCP-Kioptrix2014-3 后渗透测试
拿到root权限 之前的努力,最终获得了两个session 尝试看看该操作系统的漏洞 kali: searchsploit freebsd 9.0 cp /usr/share/exploitdb/ex ...
- 转载Linux常用命令
转自:https://blog.csdn.net/deng_xj/article/details/88803148 Linux常用shell命令 [root@dengxj]#各项含义[用户名@计算机名 ...