今天的每日一题胖胖的牛牛

是泡泡 每日一题总教官
云计算领域优质创作者
2022-08-06 10:33:46
加精
#include<bits/stdc++.h>
using namespace std;
const int N = 1001;
char s[N][N];
int lx,ly,fx,fy,n;
int vis[N][N][4],dis[N][N][4];
struct node{
    int x,y,num;
};
int dx[]={1,-1,0,0};
int dy[]={0,0,-1,1};
bool pd(int x,int y)
{
	if(x<1||y<1||x>n||y>n||s[x][y]=='x')
	{
		return true;
	}
	return false;
}
void spfa()
{
	queue<node>q;
    memset(dis,0x3f3f3f3f,sizeof(dis));
    for(int i=0;i<4;i++)
	{
		q.push({lx,ly,i});
		dis[lx][ly][i]=0;
	}
	while(q.size())
    {
        node t=q.front();
        q.pop();
        vis[t.x][t.y][t.num]=0;
        for(int i=0;i<4;i++)
        {
            int xx=t.x+dx[i],yy=t.y+dy[i];
            if(pd(xx,yy))
			{
				continue;
        	}
			int dd=(i!=t.num);
            if(dis[xx][yy][i]>dis[t.x][t.y][t.num]+dd)
            {
                dis[xx][yy][i]=dis[t.x][t.y][t.num]+dd;
                if(vis[xx][yy][i]==0)
                {
                    q.push({xx,yy,i});
                    vis[xx][yy][i]=1;
                }
            }
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin>>s[i][j];
            if(s[i][j]=='A')
			{
				lx=i;
				ly=j;
            }
			if(s[i][j]=='B')
			{
				fx=i;
				fy=j;
        	}
		}
	}
    spfa();
    int sum=0x3f3f3f3f;
    for(int i=0;i<4;i++)
	{
		sum = min(sum,dis[fx][fy][i]);
	}
    if(sum==0x3f3f3f3f)
	{
		cout<<"-1";
	}
    else
    {
    	cout<<sum;
	}
    return 0;
}

 

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

51,716

社区成员

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

 刷题!

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