字符串的特殊读取——基于蓝桥杯两道题目(C/C++)

2024-04-13 1566阅读

目录

1  例题

1.1  卡片换位

1.2  人物相关性分析

2  字符串的读取

2.1  综述

2.2  scanf

2.3  getline/getchar/get

2.4  注意

2.5  说明

3  C语言中字符串有关问题

3.1  常用函数

3.2  使用实例

3.3  附一些函数


先看例题

1  例题

1.1  卡片换位

问题描述

你玩过华容道的游戏吗?

这是个类似的,但更简单的游戏。

看下面 3 x 2 的格子

在其中放5张牌,其中A代表关羽,B代表张飞,* 代表士兵。

还有一个格子是空着的。

你可以把一张牌移动到相邻的空格中去(对角不算相邻)。

游戏的目标是:关羽和张飞交换位置,其它的牌随便在哪里都可以。

输入格式:

输入两行6个字符表示当前的局面

输出格式:

一个整数,表示最少多少步,才能把AB换位(其它牌位置随意)

 

这道题第一眼是很难想到是一道搜索题,原因在于没有对空格进行一个正确的理解:

我们知道一个人物可以挪到空格去,但我们可以这样想,

空格也可以代表一个人物(这里将他命名为K),这个人物的特殊之处在于他可以与周围的任何一个人交换位置。

那么我们在最开始的时候就记录几个特殊点的坐标:A关羽,B张飞,K空格,就能够设置搜索的边界了

那么进行搜索时总要有一个开始点,不妨我们选择让空格主动出击,主动去和周围的人物交换,进行上下左右的尝试

每dfs一次就是对华容道阵容的一次更新

重点思路就是这样,下面看一下代码的具体实现

代码(附讲解):

#include 
using namespace std;
int Min=INT_MAX;//设置成最大值
struct
{
	int x,y;	
}a,b,k;//结构体定义A,B,空格坐标
int vis[3][3][3][3][3][3];//记忆化搜索
int Next[4][2]={{1,0},{-1,0},{0,1},{0,-1}};//上下左右走
void dfs(int x1,int y1,int x2,int y2,int x,int y,int step)
{
	if(step>Min) return;//边界1,走不出去了
	if(x1==b.x&&y1==b.y&&x2==a.x&&y2==a.y)//边界2,交换完成
	{
		Min=min(step,Min);
		return;
	}
	if(x1||y2) return;//边界3,走出迷宫边界
	if(vis[x1][y1][x2][y2][x][y]==1) return;//边界4,已经搜索过这种情况了
	vis[x1][y1][x2][y2][x][y]=1;//开始dfs主干部分
	for(int i=0;i= 0 && isalpha(s[i - 1]) || i + 5 = 0 && isalpha(s[i - 1]) || i + 3 
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]