39分求助,感觉思路没毛病阿,求大佬解析
查看原帖
39分求助,感觉思路没毛病阿,求大佬解析
398504
lzm15096067472楼主2021/10/12 22:08
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<queue>
using namespace std;
struct node
{
    int x,y,t;
};
char a[310][310];
int vis[310][310],n,m;
queue<node> q;
void same(int &dx,int &dy)
{
    int i,j;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(a[i][j]==a[dx][dy]&&i!=dx&&j!=dy)
            {dx=i;dy=j;return;}
        }
    }
}
int main()
{
    int x,y,dx,dy,i,j;
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
            cin>>a[i][j];
    }
    for(i=1;i<=n;i++)
    {
            for(j=1;j<=m;j++)
          {
              if(a[i][j]=='#')
              vis[i][j]=1;
              if(a[i][j]=='@')
              {x=i;y=j;}
          }
    }
    q.push((node){x,y,0});
    vis[x][y]=1;
    int xx[4]={1,-1,0,0},
        yy[4]={0,0,1,-1};
    while(!q.empty())
    {
        for(i=0;i<4;i++)
        {
            dx=xx[i]+q.front().x;
            dy=yy[i]+q.front().y;
            if(dx>=1&&dx<=n&&dy>=1&&dy<=m&&!vis[dx][dy])
            {
                if(a[dx][dy]<='Z'&&a[dx][dy]>='A')
                {  vis[dx][dy]=1;
                    same(dx,dy);
                   q.push((node){dx,dy,q.front().t+1});
                   vis[dx][dy]=1;
                }
                else
                {
                   q.push((node){dx,dy,q.front().t+1});
                   vis[dx][dy]=1;
                }
            }
        }
        if(a[q.front().x][q.front().y]=='=')
        { cout<<q.front().t;
          return 0;
        }
        q.pop();
    }
 return 0;

}

2021/10/12 22:08
加载中...