[蓝桥杯]迷宫(路径的存储和打印是关键,orz)

news/2024/11/7 20:37:45/

//存储容器:1:node father[maxn][maxn];//当前节点的父节点

2:struct node//***
{
    int x,y,d;
    char pos;//存储D L R U
};

具体存储:

for(int i=0;i<4;i++){int tox=now.x+dix[i];int toy=now.y+diy[i];father[tox][toy].x=tox;father[tox][toy].y=toy;if(i==0)//存储路径father[tx][ty].pos='D';else if(i==1)father[tx][ty].pos='L';else if(i==2)father[tx][ty].pos='R';else if(i==3)father[tx][ty].pos='U';
}

打印:

dfs(29,49);//终点坐标

void dfs(int x,int y)//递归打印
{if(x==0&&y==0)//找到起点开始正向打印路径return;elsedfs(father[x][y].x,father[x][y].y);cout<<father[x][y].pos;//在递归下面 
}

ACcode:

#include<bits/stdc++.h>
using namespace std;
#define maxn 2000char maze[maxn][maxn];//地图 
bool vis[maxn][maxn];//标记
int dir[4][2]={{1,0},{0,-1},{0,1},{-1,0}};//D L R U,(以这个顺序走,第一个到达终点的不然是字典序最小,因为走的时候就要求字典序最小) 
//char idr[]={'D','L','R','U'}; //和移动方向配对,方便下方的标记从上一点到当前点所走的方向 
bool in(int x,int y)//坐标算法合理 
{return x<30&&x>=0&&y>=0&&y<50;
}struct node//***
{int x,y,d;char pos;//存储D L R U
};node father[maxn][maxn];//当前节点的父节点
node now,nex;//指向当前和下一个位置void dfs(int x,int y)//递归打印
{if(x==0&&y==0)//找到起点开始正向打印路径return;elsedfs(father[x][y].x,father[x][y].y);cout<<father[x][y].pos;//在递归下面 
}void bfs(int x,int y)//bfs 
{queue<node> q;now.x=x;now.y=y;now.d=0;q.push(now);//起点入队 vis[x][y]=true;//起点标记为访问过 while(!q.empty())//核心 {now=q.front();//拿出队头 q.pop();//拿完了就弹出来if(now.x==29&&now.y==49){//到达终点,结束 break;}for(int i=0;i<4;i++)//走下左右上按字典序的四个方向{int tx=now.x+dir[i][0];int ty=now.y+dir[i][1];if(in(tx,ty)&&!vis[tx][ty]&&maze[tx][ty]!='1')//判断是否超出范围,是否用过,是否为1{vis[tx][ty]=true;//标记为用过nex.x=tx;nex.y=ty;nex.d=now.d+1;//d其实没必要,统计步数 q.push(nex);//压入队列father[tx][ty].x=now.x;//存储父节点坐标********************father[tx][ty].y=now.y;if(i==0)//存储路径father[tx][ty].pos='D';else if(i==1)father[tx][ty].pos='L';else if(i==2)father[tx][ty].pos='R';else if(i==3)father[tx][ty].pos='U';}}}
}int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);for(int i=0;i<30;i++){//输入 for(int j=0;j<50;j++){cin>>maze[i][j];}}bfs(0,0);//bfs dfs(29,49);//打印路径return 0;
}

overover~


http://www.ppmy.cn/news/40603.html

相关文章

TCP连接耗尽攻击异常报文攻击与防御

TCP连接耗尽攻击与防御 TCP是面向连接的协议&#xff0c;其通信双方必须保持连接状态&#xff0c;并且通过确认、重传、滑动窗口等机制&#xff0c;保证数据传输的可靠性和稳定性。攻击者利用 TCP 的上述特点&#xff0c;利用TCP连接消耗被攻击目标的系统资源。 连接耗尽攻击…

谈ChatGPT基本信息

ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型。 ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&#xff0c;真正像人类一样来聊天交流&#…

【eMMC学习记录】emmc相关名词解释和基础概念

名词解释 NAND Flash:半导体闪存 HDD&#xff1a;机械硬盘 FW:固件 Peak Power:峰值功率 Active Power:读写功耗 Idle Power:空闲功耗 standby/sleep Power Dev Sleep Power:SSD内部休眠功耗 RAM:掉电丢失数据 FGT:浮栅晶体管 FormFactor:尺寸标准件 AFA:全闪存整列…

可视化CNN和特征图

卷积神经网络(cnn)是一种神经网络&#xff0c;通常用于图像分类、目标检测和其他计算机视觉任务。CNN的关键组件之一是特征图&#xff0c;它是通过对图像应用卷积滤波器生成的输入图像的表示。 理解卷积层 1、卷积操作 卷积的概念是CNN操作的核心。卷积是一种数学运算&#x…

医疗耗材缺陷视觉检测的应用

近年来&#xff0c;全球医疗耗材市场规模持续增长&#xff0c;GMP标准不断提高&#xff0c;用工成本不断上升。 在药品生产和包装环节&#xff0c;传统的人造灯检测方式已经不能满足生产自动化和质量控制的要求。 随着AI、医疗耗材缺陷视觉检测等新技术的发展和应用&#xff0c…

(十一)centos7案例实战——通过系统监控日志定制实现系统安全监控

前言 在实际的生产服务器环境中&#xff0c;我们常常会碰到服务器系统的安全问题&#xff0c;如何监控我们的服务器系统安全也是需要我们考虑的问题&#xff0c;由于网络攻击、恶意操作系统等等情况&#xff0c;我们需要查看这些历史操作&#xff0c;这就需要我们可以通过系统…

STM-32:USART串口协议、串口外设—数据发送/数据发送+接收

目录一、串口通信1.1通信接口1.2串口通信1.2.1简介1.2.2硬件电路1.2.3串口参数及时序二、STM32的USART外设2.1USART简介2.2USART框图三、数据传输3.1数据帧3.2输入数据策略3.2.1起始位侦测3.2.2数据采样3.3波特率发生器3.4数据模式四、实际用例4.1串口发送4.1.1接线图4.1.2程序…

在MDK5(Keil537)中同时配置STM32和C51的环境(简单可行)

1.首先安装MDK5&#xff0c;可以看到&#xff0c;安装路径为D盘下的Keil_v4Andv5文件夹&#xff0c;next进行安装 2.安装完成后,这一步非常重要&#xff0c;将TOOLS文件改名&#xff0c;随便改什么都行。否则下载keil4时产生的TOOL文件将会取消下载或者替换掉原文件 3.接下来下…