求助玄关(代码通俗易懂
查看原帖
求助玄关(代码通俗易懂
1176727
yuanzongzi799楼主2025/7/23 19:18
#include<bits/stdc++.h>
using namespace std;
int n,m;
char maze[303][303];
int q[4][903];
int head,tail;
int sx,sy,ex,ey;
int dx[]={-1,0,1,0},dy[]={0,-1,0,1};
int bfs()
{
    head=tail=1;
    q[1][1]=sx;
    q[2][1]=sy;
    q[3][1]=0;
    while(head<=tail)
    {
        int x=q[1][head];
        int y=q[2][head];
        for(int k=0;k<4;k++)
        {
            int nx=x+dx[k];
            int ny=y+dy[k];
            if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&maze[nx][ny]!='#')
            {
                tail++;
                q[3][tail]=q[3][head]+1;
                char goal=maze[nx][ny];
                maze[nx][ny]='#';
                if(goal=='.')
                {
					q[1][tail]=nx;
                    q[2][tail]=ny;
                }
                else
                {
					for(int i=1;i<=n;i++)
                    {
                        for(int j=1;j<=m;j++)
                        {
                            if(maze[i][j]==goal)
                            {
                                q[1][tail]=nx=i;
                                q[2][tail]=ny=j;
                                maze[i][j]='#';
                            }
                        }
                    }
                }
            }                
               if(nx==ex&&ny==ey)
                {
                    return q[3][tail];
                }
        }
        head++;
    }
    return -1;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cin>>maze[i][j];
            if(maze[i][j]=='@')
            {
				sx=i,sy=j;
				maze[i][j]='.';
			} 
            if(maze[i][j]=='=')
            {
				ex=i,ey=j;
				maze[i][j]='.';
			} 
        }
    }
    cout<<bfs()<<"\n";
    return 0;
}
2025/7/23 19:18
加载中...