来一个广搜

广搜是c++中的一种常见算法,如果你有一些c++的基本知识,那你可以看一下这个代码。

#include<bits/stdc++.h>
using namespace std;
int n,m;
struct node{
	int x,y;
	int step;
}q[250100];
char mp[505][505];
int vis[505][505];
int dis[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int bfs(int sx,int sy,int tx,int ty){
	int head=0,tail=0;
	node tmp;
	tmp.x=sx;tmp.y=sy;tmp.step=0;
	vis[sx][sy]=1;
	q[tail++]=tmp;
	while(head<tail){
		node f=q[head];head++;
		for(int i=0;i<4;i++){
			int xx=f.x+dis[i][0];
			int yy=f.y+dis[i][1];
			if(xx<0||xx>=n||yy<0||yy>=m||mp[xx][yy]=='#'||vis[xx][yy]==1){
				continue;
			}
			node g;
			g.x=xx;g.y=yy;g.step=f.step+1;
			vis[xx][yy]=1;
			q[tail++]=g;
			if(xx==tx&&yy==ty){
				return g.step;
			}
		}
	}
	return -1;
}
int main(){
    scanf("%d%d",&n,&m);
	int sx,sy,tx,ty;
	
	for(int i=0;i<n;i++){
		scanf("%s",mp[i]);
		for(int j=0;j<m;j++){
			if(mp[i][j]=='S'){
				sx=i;
				sy=j;
			}
			if(mp[i][j]=='T'){
				tx=i;
				ty=j;
			}
		}
	}
	printf("%d\n",bfs(sx,sy,tx,ty));
	return 0;
}

主要因为作者比较菜,所以用的是一个数组,一般使用队列。

给大家看一下题目。

**最近在研究机器人,**想看看自己的somebody够不够智能,于是**将somebody放在一个n*m的迷宫中,看看机器人能不能在最短的时间内到达目的地,可是**不知道最短的时间是多少,现在请你帮**算算somebody到达目的地的最短时间是多少?

然后是样例。

3 3

S..

##.

.T.

作者相信读者一定非常智慧,所以样例是什么意思,肯定看得出来。如若没看出来,智慧的作者也是可以写的。

S:起点,#:障碍(反正**过不去),T:终点,。:(不要看漏啦)可以通行。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值