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