lanqiao.125卡片换位(2016年蓝桥杯C/C++省赛C组)

news/2024/7/24 0:51:42 标签: 蓝桥杯, c语言, c++

题目:

语法点:

1. unordered_map<string,int> dist; //存储图的不同状态及不同状态对应的步数

2. unordered_map的相关操作,详细见C++中的unordered_map用法详解-CSDN博客

dist.count(x)    //来寻找x出现的次数
dist.find(x)     //来查找x是否存在
//返回值是无符号数据

3. string的用法String用法详解-CSDN博客

易错点:

1. 判断范围时不要写错,不然蓝桥平台容易超时,判错

代码:

这个代码只能通过7个测试点(总共8个测试点),还有一个通过不了

//lanqiao.125卡片换位
//注意:cin>>不可读入空格 
#include<iostream>
#include<cstring>
#include<algorithm>
#include <unordered_map>   //区别 
#include<queue> 
using namespace std;
//定义三个字符串,定义存储A,B位置的下标
//方位
unsigned int index1,index2;
string str1,str2,s; 
int dx[]={0,-1,0,1},dy[]={-1,0,1,0};
unordered_map<string,int> dist; //存储图的不同状态及不同状态对应的步数
int bfs()
{
	//定义队列
	//初始化(这里不用):坐标,路径,标记【看情况而定】 
	//push一开始的状态
	queue<string> q;
	dist[s]=0;     //初始步数为0; 
	q.push(s);
	
	/*bfs主要部分:
	 while(!q.empty())
	 	{
	 		1.初始进队列 
	 		1.递归出口;
			2. 主要部分:
				找到空格位置
				一维度转二维
				位置步数记录 
				for()变换方位
					{
						越界判断if()
						交换
						if()	
							放入新队列
							步数加1; 
						换回来 
					}
		}
	*/
	while(!q.empty())
		{
			string t=q.front();
			q.pop();
			if(t.find('A')==index2&&t.find('B')==index1)
				{
				/*	cout<<dist[t];
					break;	*/
					return dist[t];
				}
			int k=t.find(' ');
			int x=k/3,y=k%3;
			long long distance=dist[t];
			
			for(int i=0;i<4;i++)
				{
					int nx=x+dx[i],ny=y+dy[i];
					if(nx<0||nx>1||ny<0||ny>2)
						{
							continue;
						}
					swap(t[k],t[nx*3+ny]);  //nx*3+ny是把一维转成二维 
					if(!dist.count(t))
						{
							q.push(t);
							dist[t]=distance+1;
						}
					swap(t[k],t[nx*3+ny]);
				 } 
			
		 } 
	return -1;
}
int main()
{
	getline(cin,str1);
	getline(cin,str2);
	s=str1+str2;
	
	index1=s.find('A');
	index2=s.find('B');	
	cout << bfs();
	return 0;
	
 } 


http://www.niftyadmin.cn/n/5480647.html

相关文章

C++的并发世界(十一)——线程池

0.线程池的概念 1.线程池使用步骤 ①初始化线程池&#xff1a;确定线程数量&#xff0c;并做好互斥访问&#xff1b; ②启动所有线程 ③准备好任务处理基类&#xff1b; ④获取任务接口&#xff1a;通过条件变量阻塞等待任务 2.atomic原子操作 std:atomic是C11标准库中的一个…

C/C++ inline 函数

C/C中包含了一类inline函数&#xff0c;其只是单纯在原本函数申明或者定义前面多了一个inline 但是带来含义的确实不一样的。 如果不带inline那么主函数执行到函数入口处会跳到相应的函数代码除继续执行&#xff0c;在内存 中的代码段内存中这些代码不是连续的&#xff0c;这样…

Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066

很奇怪的问题,在使用nifi的时候碰到的,这里是用NIFI,把数据从postgresql中同步到mysql中, 首先postgresql中的源表,中是没有create_time这个字段的,但是同步的过程中报错了. 报错的内容是说,目标表中有个create_time字段,这个字段是必填的,但是传过来的flowfile文件中,的数据没…

关于moviepy出现must be real number, not NoneType

#降级装饰器版本 decorator4.4.2 不行就再降4.0.2 有的也可以通过省级mv解决更多解答https://stackoverflow.com/questions/68032884/getting-typeerror-must-be-real-number-not-nonetype-whenever-trying-to-run-wr

查询category的id存在于项目表中category_id_list的json array字段中

表category 表project 查询category的id存在于项目表中category_id_list的json array字段中。

LDO原理以及相关性能参数

LDO概述 LDO是Low Dropout Regulator的缩写&#xff0c;意思是低压差线性稳压器。 LDO的性能特点&#xff1a; 低压差是指输入电压与输出电压的差值比较低&#xff1b; 线性是指MOS基本处于线性工作状态&#xff1b; 稳压器是指在正常的VIN范围内&#xff0c;输出VOUT都稳…

dynamicreports示例

1. 简单段落文本报表 //标题样式StyleBuilder titleStyle DynamicReports.stl.style().setHorizontalTextAlignment(HorizontalTextAlignment.CENTER)//设置对齐方式.setFontSize(50)//设置字体.setBackgroundColor(Color.CYAN);//设置背景颜色//段落样式StyleBuilder paragra…

面试算法-166-排序链表

题目 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [4,2,1,3] 输出&#xff1a;[1,2,3,4] 解 class Solution {public ListNode sortList(ListNode head) {if (head null || head.next null…