[洛谷]P2960 [USACO09OCT]Invasion of the Milkweed G(BFS,坑点多多)

news/2025/5/21 1:34:42

、1:坐标是反的,(1,1)是在左下角,正常在右上角,所用建图的时候要小心

 

   2:

加node(),搭配 

中的构造

3: 

不用判断位置是否越界,数组从1,1开始,最外面有一层‘0’保护,遇到了自然不符合就退出了

4:列是不确定,不是每行的列数都一样,所用上述的方法(外面还有一层‘0’)还可以少一个记录每行列数的操作。

5:不用在while循环中判断是否结束,直接统计天数,在结束后输出

 

 

ACcode: 

#include<bits/stdc++.h>//万能头 
using namespace std;
const int dir[8][2]{{1,0},{-1,0},{1,1},{0,1},{-1,1},{1,-1},{0,-1},{-1,-1}};//方位打表 
char G[1005][1005];//存图 
int g[1005][1005];//判断是否被搜索过 
int ttt=0;
struct node{//构造函数 int y;//y坐标 int x;//x坐标 int t;//到达路径 node(int yy,int xx,int tt)//构造 {y=yy;x=xx;t=tt;}
};
void bfs(int y,int x)//广搜 
{queue<node> sj;//定义一个队列 sj.push(node(y,x,0));//插入第一个乳草起点 g[y][x]=true;//做标记,搜索过 while(!sj.empty())//如果队列中还有数 {node now=sj.front();//从队首取出当前数 sj.pop();//并踢出他 ttt=now.t;//记录步数 for(int j=0;j<8;j++)//检测八个方位角 {int ty=now.y+dir[j][1];//记录方位坐标 int tx=now.x+dir[j][0];if(G[ty][tx]=='.'&&!g[ty][tx])//如果他没有被检测并且是草 {g[ty][tx]=true;//侵略他 sj.push(node(ty,tx,now.t+1));//插入他 }}}cout<<ttt;//如果结束了(搜索完了) 输出周数 
} 
int main()//主程序 
{int x,y,mx,my;scanf("%d%d%d%d",&x,&y,&mx,&my);//输入 for(int i=y;i>=1;i--){for(int j=1;j<=x;j++){cin>>G[i][j];//千万不能用scanf,莫名其妙错误 }}bfs(my,mx);//调用函数 return 0;//完美结束 
}

文章来源:https://blog.csdn.net/m0_74969835/article/details/131055212
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:https://dhexx.cn/news/show-4633718.html

相关文章

51单片机银行自助排队叫号系统VIP热敏打印功能DY-SV17F语音播报

实践制作DIY- GC0138-银行自助排队叫号系统VIP 基于51单片机设计---银行自助排队叫号系统VIP 二、功能介绍&#xff1a; STC89C52最小系统板0.96寸OLED显示器DY-SV17F语音串口语音播报模块DS1302北京时间热敏打印机1个业务选择&#xff08;取钱或者存钱&#xff09;1个普通取号…

NEEPUSec CTF 2023 easymath

easymath 题目描述&#xff1a; from Crypto.Util.number import *flagbytes_to_long(bNeepu{xxx})N 738931348122338421499476261982330058997842307585754071200798137388701886017484620800095723028366934218646065252158059518352370641258869511690690571844077077623…

【网络安全】企业应急响应基础技能

windows 任务计划列表 1. 计算机管理窗口,选择 系统工具 中 任务计划程序 中的 任务计划程序库选项 可以查看任务计划的名称,状态,触发器等详细信息 2.powershell中输入get-scheduledtask 可以查看当前系统所有任务计划信息 任务路径,名称,状态等详细信息 3.命令行中输入s…

7. JVM调优实战及常量池详解

JVM性能调优 1. 阿里巴巴Arthas详解1.1 Arthas使用 本文是按照自己的理解进行笔记总结&#xff0c;如有不正确的地方&#xff0c;还望大佬多多指点纠正&#xff0c;勿喷。 课程内容&#xff1a; 1、阿里巴巴Arthas调优工具详解 2、GC日志详解与调优分析 3、Class常量池与运行…

硬件工程师-BOOST升压电源设计

一、Boost变换原理 开关闭合时&#xff0c;电感电压等于输入电压 开关断开时&#xff0c;电感电压输出电压-输入电压&#xff0c; 电感的感生电动势&#xff0c;N ΔΦ磁通的变化率&#xff0c;Δt时间 假设开关闭合与开关断开&#xff0c;开关断开时能量全部释放光 将第三个式…

VUE 样式局部替换

在处理VUE样式时,全局组件样式不能修改的,只有局部替换不替换全局或其它组件的样式,这时要用::v-deep. vue样式穿透 ::v-deep的具体使用 之前在项目中用到了el或vant,使用特别简单,而且组建也非常的丰富。即时这样,在项目中肯定也需要用额外的样式来打造自己的应用。直…

编程的实践理论 第四章 编程程序理论

第四章 编程程序理论 我们开始于一个非常简单的计算模型。一个计算机有一个内存&#xff0c; 我们能注意到它的内容&#xff0c;或者说是状态。我们对计算的输入&#xff0c; 是为了提供一个初始化的状态&#xff0c;或者说是前置状态。一段时间 之后&#xff0c;从计算的输出…

Docker容器的基本使用

Docker容器的基本使用 一、Docker容器介绍二、检查本地Docker环境1. 检查Docker版本2. 检查Docker服务状态三、创建一个测试web01容器1. 检查本地容器镜像2. 下载nginx镜像3. 创建一个测试容器四、查看测试容器web01的状态1. 查看容器运行状态2. 检查容器的运行日志3. 查看容器…

紧急防勒索病毒的防御方案

一、适用目标&#xff08;校园网、企业网&#xff0c;windows系列的操作系统&#xff09;&#xff1a; 所有在校园内运行windows系统的电脑&#xff0c;并非只感染服务器操作系统&#xff0c;单机照样感染。会将你电脑中的所有文件全部加密&#xff0c;部分已感染案例有2个共同…

西门子PLC各数据存储区含义

西门子PLC中存储区分类有I、Q、M、SM、T、C、V、S、L、AI、AQ 1、I存储区(输入映像寄存器) 是输入触点,可以接收外部的电平信号 是外部输入,各种按钮,开关,传感器等把信号给至PLC的都称之为输入 S7-200 PLC编址范围(I0.0~I15.7)。输入映像寄存器(该区域可以按位操作又…