蓝桥杯 历届试题 九宫重排

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

  我们把第一个图的局面记为:12345678.
  把第二个图的局面记为:123.46758
  显然是按从上到下,从左到右的顺序记录数字,空格记为句点。
  本题目的任务是已知九宫的初态和终态,求最少经过多少步的移动可以到达。如果无论多少步都无法到达,则输出-1。
输入格式
输入第一行包含九宫的初态,第二行包含九宫的终态。
输出格式
输出最少的步数,如果不存在方案,则输出-1。
样例输入
12345678.
123.46758
样例输出
3
样例输入
13524678.
46758123.
样例输出
22
 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<algorithm>
 5 #include<vector>
 6 #include<queue>
 7 #include<set> 
 8 #define N 20005
 9 using namespace std;
10 
11 char mp[3][3], gp[3][3];
12 int dir[4][2] = {0,1, 1,0, -1,0, 0,-1};
13 char str[10];
14 struct node{
15     int x, y;
16     int step;
17     char cur_mp[3][3];//记录当前图案
18     node(){
19     }
20     node(int x, int y, int step){
21         this->x = x;
22         this->y = y;
23         this->step = step;
24     }
25 };
26 set<int>st;
27 queue<node>q;
28 bool check(node cur){
29     for(int i=0; i<3; ++i)
30         for(int j=0; j<3; ++j)
31             if(cur.cur_mp[i][j] != gp[i][j])
32                 return false;
33     return true;
34 }
35 
36 int cal(node cur){//每一次移动将会映射到一个不同的整数
37     int ss = 0;
38     for(int i=0; i<3; ++i)
39         for(int j=0; j<3; ++j)
40             if(cur.cur_mp[i][j] != '.')
41                 ss = ss*10+(cur.cur_mp[i][j]-'0');
42             else ss = ss*10+9;
43     return ss;
44 }
45 
46 void bfs(){
47     st.clear();
48     if(!q.empty())
49         st.insert(cal(q.front()));
50     while(!q.empty()){
51         node cur = q.front();
52         q.pop();
53         if(check(cur)) {
54             cout<<cur.step<<endl;
55             return ;
56         }
57         
58         for(int i=0; i<4; ++i){
59             int xx = cur.x+dir[i][1];
60             int yy = cur.y+dir[i][0];
61             if(xx<0 || xx>2 || yy<0 || yy>2) continue;
62             node nt = node(xx, yy, cur.step+1);
63             memcpy(nt.cur_mp, cur.cur_mp, sizeof(cur.cur_mp));
64             nt.cur_mp[cur.x][cur.y]^=nt.cur_mp[xx][yy];
65             nt.cur_mp[xx][yy]^=nt.cur_mp[cur.x][cur.y];
66             nt.cur_mp[cur.x][cur.y]^=nt.cur_mp[xx][yy];
67             int val = cal(nt);
68             if(st.find(val) != st.end()) continue;
69             st.insert(val);
70             q.push(nt);
71         }
72     }
73     cout<<-1<<endl;
74 }
75 
76 int main() {
77     while(cin>>str){
78         int bx, by;
79         while(!q.empty()) q.pop();
80         int len = 0;
81         for(int i=0; i<3; ++i)
82             for(int j=0; j<3; ++j){
83                 mp[i][j] = str[len++];
84                 if(mp[i][j] == '.') bx=i, by=j;
85             }
86         node cur = node(bx, by, 0);
87         memcpy(cur.cur_mp, mp, sizeof(mp));
88         q.push(cur);
89         cin>>str;
90         len = 0;
91         for(int i=0; i<3; ++i)
92             for(int j=0; j<3; ++j)
93                 gp[i][j] = str[len++];
94         bfs();
95     }
96     return 0;
97 }

 

转载于:https://www.cnblogs.com/hujunzheng/p/4345489.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚拟云服务器有哪些,虚拟云主机和服务器有什么区别

虚拟云主机和服务器有什么区别&#xff1f;不管是放网站程序&#xff0c;还是数据库&#xff0c;或者是各种软件等&#xff0c;都需要先选择一个适合的空间去储存这些信息。现在&#xff0c;选择云主机和独立服务器的客户都比较多&#xff0c;两者有什么使用区别呢。虚拟云主机…

java坦克大战源码下载

HJZGG: https://github.com/hjzgg/hjzgg_tank_java 解压之后运行可执行jar包即可&#xff01;效果图如下&#xff1a; v 1.游戏开始v 2.选择地图v 3.开始游戏v 4.游戏自定义转载于:https://www.cnblogs.com/hujunzheng/p/4348415.html

虚拟化服务器的管理与维,服务器虚拟化管理

服务器虚拟化管理 内容精选换一换为了解决Windows系统的源端服务器与目的端弹性云服务器的兼容性问题&#xff0c;您需要手动给目的端服务器安装相关驱动进行优化。登录管理控制台。选择“计算 > 弹性云服务器”。在弹性云服务器列表中&#xff0c;查看目的端服务器的规格。…

HDU 1007Quoit Design(最近点问题)

最近点问题&#xff1a;二维平面中有n&#xff08;n很大&#xff09;个点&#xff0c;求出距离最近的两个点思路&#xff1a;因为n的值很大&#xff0c;所以暴力和dp都行不通了吧&#xff01;分治法就挺好的。将区间一半一半的分开&#xff0c;直到分成只有一个点或两个点的时候…

网页信息上传服务器,Unity 连接网页服务器 获取数据上传数据

usingLitJson;usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingSystem.IO;usingSystem.Net;usingSystem.Net.Http;usingSystem.Text;usingUnityEngine;usingUnityEngine.Networking;usingUnityEngine.UI;//请求连接//数据类型public classConserver…

Myeclipse 操作数据库

步骤1&#xff1a;通过MyEclipse中的window-》show View-》other 调出。DB浏览器&#xff0c;和 SQL Results 步骤2. 可以右键单击空白处&#xff0c;选择new&#xff0c;创建一个新的DB connection&#xff0c; 或者edit已经存在的DB connection 步骤3&#xff1a;数据库信息填…

媒体服务器协议,媒体服务器介绍(mediactrl架构)

5.1.1MediaCtrl媒体控制草案MediaCtrl是IETF下专门研究和制定媒体服务器控制标准的小组&#xff0c;以SIP和XML为所制定标准的基础。这个工作组的工作包括&#xff1a;定义媒体服务器控制的技术需求说明、框架、控制协议簇和定位/连接协议。5.1.1.1技术需求描述这个技术需求描述…

蓝桥杯 历届试题 带分数

历届试题 带分数 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB问题描述 100 可以表示为带分数的形式&#xff1a;100 3 69258 / 714。还可以表示为&#xff1a;100 82 3546 / 197。注意特征&#xff1a;带分数中&#xff0c;数字1~9分别出现且只出现一次&…

蓝桥杯 历届试题 剪格子

历届试题 剪格子 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB问题描述 如下图所示&#xff0c;3 x 3 的格子中填写了一些整数。--*---- |10* 1|52| --****-- |20|30* 1| *******-- | 1| 2| 3| ------ 我们沿着图中的星号线剪开&#xff0c;得到两个部分&#xf…

蓝桥杯 历届试题 危险系数

历届试题 危险系数 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB问题描述 抗日战争时期&#xff0c;冀中平原的地道战曾发挥重要作用。地道的多个站点间有通道连接&#xff0c;形成了庞大的网络。但也有隐患&#xff0c;当敌人发现了某个站点后&#xff0c;其它站…

android target unknown and state offline解决办法

没有错&#xff0c;将adb的版本升级一下就好了&#xff01; 下载地址为&#xff1a;http://files.cnblogs.com/files/hujunzheng/adb1.0.32.zip 转载于:https://www.cnblogs.com/hujunzheng/p/4360436.html

Spring3 整合 Hibernate4实现数据库操作(1)

Hibernate知识学习&#xff1a;http://justsee.iteye.com/blog/1061576 注意Hibernate4在开发当中的一些改变 &#xff1a;http://snake-hand.iteye.com/blog/1995592 //首先在web.xml中加入OpenSessionInViewFilter过滤器 <filter> <filter-name>openSessionInV…

s2sh框架搭建(辅助工具:MyEclipse)及解决一些遇到的问题

1.新建一个web project 2.首先生成Hibernate Facet 3.Hibernate Facet 安装步骤 4.然后是spring facet安装步骤 5.最后是struts facet 的配置 6.最后的整体布局如下所示 7.在服务器上运行&#xff0c;发现如下错误&#xff1a; 严重: Exception sending context initialized ev…

520爱心表白——C语言入门

520爱心表白——C语言入门 关于爱心表白的代码&#xff0c;网上有很多非常好看而且可以实现颜色变换和立体&#xff0c;动态等效果的代码。但是我入门不久&#xff0c;能力有限。520重要的可能还是在心意我觉得&#xff0c;所以自己写了一个非常简单毫无技术含量爱心代码来表达…

MyEclipse在搭建s2sh时 如何 uninstalled facet

在资源管理器中&#xff1a;找到当前【项目的根目录】&#xff0c;在【.setting】目录中&#xff0c; 找到【org.eclipse.wst.common.project.facet.core.xml】文件。 用【文本编辑器工具】打开&#xff0c;找到&#xff1a; <installed facet"me.hibernate" vers…

s2sh框架搭建(基于spring aop)

对于spring aop 是如何管理事务的&#xff0c;请看一下&#xff1a;http://bbs.csdn.net/topics/290021423 1.applicationContext.xml <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans&q…

codeforces B. Pasha and String(贪心)

题意&#xff1a;给定一个长度为len的字符序列&#xff0c;然后是n个整数&#xff0c;对于每一个整数ai&#xff0c; 将字符序列区间为[ai,len-ai1]进行反转。求出经过n次反转之后的序列&#xff01; 1 /*2 思路1&#xff1a;将区间为偶数次的直接去掉&#xff01;对剩下的…

java简单词法分析器(源码下载)

java简单词法分析器 : http://files.cnblogs.com/files/hujunzheng/%E7%AE%80%E5%8D%95%E8%AF%8D%E6%B3%95%E5%88%86%E6%9E%90%E5%99%A8.zip 转载于:https://www.cnblogs.com/hujunzheng/p/4383880.html

java 模拟qq源码

java 模拟qq源码&#xff1a; http://files.cnblogs.com/files/hujunzheng/QQ--hjzgg.zip 转载于:https://www.cnblogs.com/hujunzheng/p/4390307.html

蓝桥杯 算法提高 日期计算

算法提高 日期计算 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB问题描述已知2011年11月11日是星期五&#xff0c;问YYYY年MM月DD日是星期几&#xff1f;注意考虑闰年的情况。尤其是逢百年不闰&#xff0c;逢400年闰的情况。 输入格式输入只有一行YYYY MM DD 输出…