ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

题目 1426: 蓝桥杯历届试题-九宫重排

2022-02-10 13:00:00  阅读:180  来源: 互联网

标签:200000 输出 1426 des beg 蓝桥 数组 重排 九宫


题目描述

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

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

输入

输入第一行包含九宫的初态,第二行包含九宫的终态。

输出

输出最少的步数,如果不存在方案,则输出-1。

样例输入

12345678. 
123.46758 

样例输出

3

题目思路

暴力搜索,然后去掉重复的图,九宫格最多的排列组合也就是9!,也就是说最多一共362880种,本题使用使用100000的数组可以拿到50%的分,150000的数组可以拿到67%的分,200000的数组可以拿到100%的分,也没到达362880,也就是说以最大种类为上界是完全可以拿到全部分的,这里要注意定义大数组要在全局变量里定义,我用的DEV局部变量string类型定义200000个是会崩溃的,以下是详细代码.

#include<bits/stdc++.h>
using namespace std;

string arr[200000],beg,des;
int dis[200000],front,rear,pos;
int main() {
	set<string>s;
	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[rear]<<endl;
					return 0;
				}
			}
			c=beg[pos];
			beg[pos]=beg[p];
			beg[p]=c;
		}
		front++;
	}
	cout<<-1<<endl;
	return 0;
}

标签:200000,输出,1426,des,beg,蓝桥,数组,重排,九宫
来源: https://blog.csdn.net/weixin_56267024/article/details/122858299

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有