bfs写法 nightmare

1代表空地 0代表阻挡物 3代表出口 4代表补给站 问最短路径
因为可以重复走 为了防止超时 要用一个use数组 要是当前的时间比use数组的大 更新use数组的值 相当于剪枝
AC代码:

#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
struct node{
   
	int x;
	int y;
	int time;
	int step;
};
int flag;
int use[10][10];
int way[4][2]={
   0,1,0,-1,1,0,-1,0};
int map[10][10];
int sx,sy;
int m,n;
int ans,rm;
queue<node>q;
bool ib(int x,int y)
{
   
	if(x<1||y<1||x>m||y>n)
	return 0;
	return 1;
}
void bfs()
{
   
	while(!q.empty())
	{
   q.pop();
	}
	node n1;
	n1.x=sx;
	n1.y=sy;
	use[sx][sy]=6;
	n1.time=6;
	n1.step=0;
	q.push(n1);
	while(!q.empty())
	{
   
		node n2=q.front();
		q.pop();
		node n3;
		for(int i=0;i<=3;i++)
		{
   
			n3.x=n2.x+way[i][0];
			n3.y=n2.y+way[i][1];
			n3.step=n2.step+1;
			n3.time=n2.time-1;
			if(!ib(n3.x,n3.y)||map[n3.x][n3.y]==0)
			continue;
			if(map[n3.x][n3.y]==1&&n3.time>=use[n3.x][n3.y]&&n3.time>1)
			{
   
				use[n3.x][n3.y]=n3.time;
				q.push(n3);
			}
			if(map[n3.x][n3.y]==3)
			{
   
				flag=1;
				rm=n3.time;
				ans=n3.step; 
				return;
			}
			if(map[n3.x][n3.y]==4&&use[n3.x][n3.y]<=n3.time&&n3.time>0)
			{
   
				n3.time=6;
				use[n3.x][n3.y]=6;
				q.push(n3);
			}
			
				
		}
		
		
	}
	
}
int main()
{
   
	int t;
	scanf("%d",&t);
	while(t--)
	{
   
		flag=0;
		memset(use,0,sizeof(use));
		scanf("%d%d",&m,&n);
		for(int i=1;i<=m;i++)
		for(int j=1;j<=n;j++)
		{
   
		scanf("%d",&map[i][j]);
		if(map[i][j]==2)
		{
   
			sx=i;
			sy=j;
		}
		}
		bfs();
		if(flag==1&&rm>0)
		{
   
			printf("%d\n",ans);
		}
		else
		printf("-1\n");
	}
 } 
全部评论

相关推荐

时间线:&nbsp;1.4-1.5:&nbsp;boss&nbsp;牛客&nbsp;官网&nbsp;实习僧海投了两天,&nbsp;感觉确实没啥招人的啊,&nbsp;心里凉了一半.1.6:&nbsp;中午快手约面,&nbsp;下午字节hr飞书私聊约面,&nbsp;当时想着第一次面大厂感觉三个过一个一面就已经赢了.1.7:&nbsp;下午&nbsp;3点大厂处女面,&nbsp;哈哈面试官是重邮红岩的直接保送;&nbsp;5点快手一面,&nbsp;我说这个是我的第二次大厂面试,&nbsp;面试官问要是拿到字节和快手选择哪个,&nbsp;我说昨天看了一晚上快手百分百选快手哈哈哈.&nbsp;晚上5.30字节约二面,&nbsp;快手约二面,&nbsp;小红书约一面.1.8:&nbsp;下午2点快手二面,&nbsp;聊天面体验非常好(当天电话确认入职时间);&nbsp;4点字节二面这次不是校友了,&nbsp;然后有一个CSS实现switch效果的忘记属性咋写了,&nbsp;感觉危了;&nbsp;7.30&nbsp;问字节hr是不是挂了;&nbsp;9点开始小红书一面,&nbsp;难死我了,&nbsp;但我还是笑着面完了,&nbsp;然后卸载了小红书,&nbsp;但是过了一会会小红书hr约二面,&nbsp;遂下回来了字节约三面.1.9:&nbsp;下午2点字节三面,&nbsp;依旧聊天+算法,&nbsp;自己太菜了有一个写错了,&nbsp;面完感觉又危了;&nbsp;5点面小红书20min结束(offer审批);5.30又去问字节hr是不是挂了,&nbsp;hr小姐姐说干嘛用一个句式,&nbsp;我说手写题又又又没写出来😂,&nbsp;2min后约hr面;8.30&nbsp;快手offer总结,&nbsp;自己运气好遇到了好公司好部门好面试官,&nbsp;字节剪映&nbsp;快手电商&nbsp;小红书支付的面试体验都非常好,&nbsp;不会的题会带你一步一步思考,&nbsp;流程也非常快全部都是当天推进,&nbsp;小红书是以分钟为单位推进.&nbsp;&nbsp;面经以及细节等我慢慢整理,&nbsp;&nbsp;以及保佑所有的审批不要出问题,&nbsp;我是真怕最后全过了0offer😂bg:&nbsp;重邮&nbsp;大数据&nbsp;蓝山工作室&nbsp;一段非大厂实习
独角仙梦境:这是真👻了
找实习记录
点赞 评论 收藏
分享
01-03 19:22
宁夏大学 运营
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务