大学生活题解

样例输入:

复制代码
3
.xA
...
Bx.

样例输出:

复制代码
6

思路分析:

这道题只需要在正常的广搜模板上多维护一个--- ---方向,如果当前改变方向,就坐标不变,方向变,步数加一;否则坐标变,方向不变,步数加一。

cpp 复制代码
#include<iostream>
#include<queue>
using namespace std;
int n,xy[4][2]={{1,0},{0,1},{-1,0},{0,-1}},ans=-1;
char a[110][110];
bool mk[110][110][4];
struct node{
	int x,y,step,cnt;//cnt记录方向
};
void bfs(int x,int y){//bfs模板
	queue<node>q;
	q.push((node){x,y,0,-1});//起点方向标记-1
	while(q.size()){
		node t=q.front();
		if(a[t.x][t.y]=='B'){//判断是否到终点
			ans=t.step;
			return;
		}
		q.pop();
		for(int i=0;i<4;i++){
			int xx=t.x+xy[i][0],yy=t.y+xy[i][1];//偏移量
			if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&a[xx][yy]!='x'&&mk[xx][yy][i]==0){//判断越界等
				if(t.cnt==-1||t.cnt==i){//特判-1和方向不变
					mk[xx][yy][i]=1;
					q.push((node){xx,yy,t.step+1,i});
				}else{//方向改变
					q.push((node){t.x,t.y,t.step+1,i});
				}
			}
		}
	}
}
int main(){
	cin>>n;
	int x,y;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
			if(a[i][j]=='A'){
				x=i,y=j;
			}
		}
	}
	bfs(x,y);
	cout<<ans;
	return 0;
}
相关推荐
KaMeidebaby1 小时前
卡梅德生物技术快报|bli亲和力检测gst:告别批量跑胶:BLI实时酶切监测技术加速GST融合蛋白下游流程优化
前端·网络·数据库·人工智能·算法
alphaTao1 小时前
LeetCode 每日一题 2026/7/20-2026/7/26
算法·leetcode
zhangfeng11332 小时前
Ascendc 大语言模型框架 AscendCraft 和pypto 的区别 pypto生成算子c++源码吗
c++·人工智能·语言模型·算子开发
一只小灿灿2 小时前
C++ 修饰符全面详解
开发语言·c++
code_pgf2 小时前
C/C++ 中 `typedef` 关键字详解
c语言·c++
会周易的程序员3 小时前
js-shm: 高性能 Node.js 共享内存模块
开发语言·javascript·c++·node.js·共享内存·shm
2023自学中4 小时前
imx6ull 开发板 贪吃蛇, C++11 SDL2 无硬件GPU优化版
linux·c++
anscos4 小时前
为CUDA 代码引入静态分析
c++·工业软件·功能检测
众少成多积小致巨4 小时前
C++ 规范参考(中)
c++
小保CPP4 小时前
OpenCV C++基于AI模型的场景文本识别(OCR)
c++·人工智能·opencv·计算机视觉·ocr