13分求助!
查看原帖
13分求助!
1385348
Ai_and_Conan楼主2024/8/29 15:17

代码如下

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[301][301],vis[301][301],special[301][301],sx,sy,fx,fy;
int dx[5]={0,0,0,1,-1},dy[5]={0,1,-1,0,0};
char x;
struct node{
    int x,y,ans;
};
queue<node>q;
void pd(int bx,int by){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)
        {
           if(a[i][j]==a[bx][by]&&!(i==bx&&j==by)){
                bx=i;
                by=j;
                return ;
            }
        }
    }
}
int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)
        {
            cin>>x;
            if(x=='#') a[i][j]=0;
            if(x=='.') a[i][j]=1;
            if('A'<=x&&x<='Z') a[i][j]=x;
            if(x=='@'){
                sx=i;
                sy=j;
                a[sx][sy]=1;
            }
            if(x=='='){
                fx=i;
                fy=j;
                a[fx][fy]=1;
            }
        }
    }
    vis[sx][sy]=1;
    q.push(node{sx,sy,0});
    while(!q.empty()){
        int tx=q.front().x,ty=q.front().y,d=q.front().ans;
        q.pop();
        pd(tx,ty);
        vis[tx][ty]=1;
        if(tx==fx&&ty==fy){
            printf("%d",d);
            system("pause");
            return 0;
        }
        for(int i=1;i<=4;i++){
            int ax=tx+dx[i],ay=ty+dy[i];
            if(ax>0&&ax<=n&&ay>0&&ay<=m&&vis[ax][ay]==0&&a[ax][ay]!=0){
                q.push(node{ax,ay,d+1});
                vis[ax][ay]=1;
            }
        }
    }
    return 0;
}

如果能帮助我 我一定关注感谢!

2024/8/29 15:17
加载中...