胖胖的牛牛——BFS

_谦言万语 2022-05-02 22:46:13
加精

#include <bits/stdc++.h>
#define MOD 1000000007
#define INF 0x7f7f7f7f
using namespace std;
typedef long long LL;
const int dx[]= {1,0,-1,0};
const int dy[]= {0,1,0,-1};
int n,ax,ay,bx,by,flag,ans;
char a[105][105];
int vis[105][105];

struct node {
	int x,y,dis;
	node(int x,int y,int dis):x(x),y(y),dis(dis) {}
};

void bfs() {
	queue<node> q;
	node u(ax,ay,-1);
	q.push(u);
	vis[u.x][u.y]=1;
	while(!q.empty()) {
		node u=q.front();
		q.pop();
		if(u.x==bx&&u.y==by) {
			ans=min(ans,u.dis);
			flag=1;
			return;
		}
		for(int i=0; i<4; i++) {
			int nx=u.x+dx[i];
			int ny=u.y+dy[i];
			int ndis=u.dis+1;
			while(nx>=1 && nx<=n && ny<=n && ny>=1 && a[nx][ny]!='x') {
				if(!vis[nx][ny]) {
					vis[nx][ny]=1;
					q.push(node(nx,ny,ndis));
				}
				nx+=dx[i];
				ny+=dy[i];
			}
		}
	}
}

int main() {
	cin>>n;
	for(int i=1; i<=n; i++)
		for(int j=1; j<=n; j++)
			cin>>a[i][j],getchar();
	for(int i=1; i<=n; i++)
		for(int j=1; j<=n; j++) {
			if(a[i][j]=='A') ax=i,ay=j;
			if(a[i][j]=='B') bx=i,by=j;
		}

	ans=INF;
	bfs();
	if(flag) cout<<ans<<endl;
	else cout<<-1<<endl;
	return 0;
}


 

...全文
82 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

50,780

社区成员

发帖
与我相关
我的任务
社区描述
和众多高校算法内卷分子,一起学习和交流算法那。浓郁的算法交流氛围,拒绝躺平,有效内卷。加入我们,私信我拉你入核心内卷群。
算法数据结构leetcode 个人社区
社区管理员
  • 执 梗
  • Dream-Y.ocean
  • ღCauchyོꦿ࿐
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

 刷题!

试试用AI创作助手写篇文章吧