博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
蓝桥杯 历届试题 九宫重排
阅读量:7120 次
发布时间:2019-06-28

本文共 1916 字,大约阅读时间需要 6 分钟。

问题描述
  如下面第一个图的九宫格中,放着 1~8 的数字卡片,还有一个格子空着。与空格子相邻的格子中的卡片可以移动到空格中。经过若干次移动,可以形成第二个图所示的局面。
我们把第一个图的局面记为:12345678.
把第二个图的局面记为:123.46758
显然是按从上到下,从左到右的顺序记录数字,空格记为句点。
本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。
输入格式
  输入第一行包含九宫的初态,第二行包含九宫的终态。
输出格式
  输出最少的步数,如果不存在方案,则输出-1。
样例输入
12345678.
123.46758
样例输出
3
样例输入
13524678.
46758123.
样例输出
22
#include
#include
#include
#include
#include
#include
#include
#define N 20005using namespace std;char mp[3][3], gp[3][3];int dir[4][2] = {0,1, 1,0, -1,0, 0,-1};char str[10];struct node{ int x, y; int step; char cur_mp[3][3];//记录当前图案 node(){ } node(int x, int y, int step){ this->x = x; this->y = y; this->step = step; }};set
st;queue
q;bool check(node cur){ for(int i=0; i<3; ++i) for(int j=0; j<3; ++j) if(cur.cur_mp[i][j] != gp[i][j]) return false; return true;}int cal(node cur){//每一次移动将会映射到一个不同的整数 int ss = 0; for(int i=0; i<3; ++i) for(int j=0; j<3; ++j) if(cur.cur_mp[i][j] != '.') ss = ss*10+(cur.cur_mp[i][j]-'0'); else ss = ss*10+9; return ss;}void bfs(){ st.clear(); if(!q.empty()) st.insert(cal(q.front())); while(!q.empty()){ node cur = q.front(); q.pop(); if(check(cur)) { cout<
<
2 || yy<0 || yy>2) continue; node nt = node(xx, yy, cur.step+1); memcpy(nt.cur_mp, cur.cur_mp, sizeof(cur.cur_mp)); nt.cur_mp[cur.x][cur.y]^=nt.cur_mp[xx][yy]; nt.cur_mp[xx][yy]^=nt.cur_mp[cur.x][cur.y]; nt.cur_mp[cur.x][cur.y]^=nt.cur_mp[xx][yy]; int val = cal(nt); if(st.find(val) != st.end()) continue; st.insert(val); q.push(nt); } } cout<<-1<
>str){ int bx, by; while(!q.empty()) q.pop(); int len = 0; for(int i=0; i<3; ++i) for(int j=0; j<3; ++j){ mp[i][j] = str[len++]; if(mp[i][j] == '.') bx=i, by=j; } node cur = node(bx, by, 0); memcpy(cur.cur_mp, mp, sizeof(mp)); q.push(cur); cin>>str; len = 0; for(int i=0; i<3; ++i) for(int j=0; j<3; ++j) gp[i][j] = str[len++]; bfs(); } return 0;}

转载地址:http://chsel.baihongyu.com/

你可能感兴趣的文章
laravel使用的模板引擎 blade
查看>>
jvm之 国际酒店 一次报表 load数据死循环导致的FULLGC
查看>>
【Android开发坑系列】如何让Service尽可能存活
查看>>
javascript操作注册表
查看>>
BZOJ 1151 傲娇的人 排序
查看>>
Hierarchy Viewr 配合 adb 命令 查看窗口属性
查看>>
正则表达式
查看>>
专车降价滴滴快车使命终结?
查看>>
Jquery简介选择的
查看>>
android 滚动条
查看>>
Eclipse+Maven创webapp工程
查看>>
电商库存基础篇之一
查看>>
Android第一次打开应用程序,实现向导界面
查看>>
BC 2015在百度之星程序设计大赛 - 预赛(1)(系列转换-二分法答案贪婪)
查看>>
Labview按钮的机械动作
查看>>
Android-打反编译工具的一种方法
查看>>
DuiVision开发教程(15)-DUI文本控制基础类
查看>>
IOS-图片操作集合
查看>>
《Programming WPF》翻译 第7章 6.视频和3-D
查看>>
Ultra-QuickSort(归并排序+离散化树状数组)
查看>>