TLE 0pts 求助
查看原帖
TLE 0pts 求助
552211
1_048_576楼主2024/11/26 10:30
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int T,M,N,delta[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
long long map[2024][2024],trace[2024][2024],step[2024][2024];
int main()
{
    ios::sync_with_stdio(0);
    cin>>T;
    for(;T;T--)
    {
        cin>>N>>M;
        for(int i=1;i<=N;i++)
        {
            for(int j=1;j<=M;j++)
            {
                cin>>map[i][j];
                trace[i][j]=-1;
                step[i][j]=0;
            }
        }
        queue<pair<pair<int,int>,int>> target;
        target.push({{1,1},0});
        trace[1][1]=1;
        while(!target.empty())
        {
            pair<pair<int,int>,int> temp=target.front();
            target.pop();
            for(int i=0;i<4;i++)
            {
                int x=temp.first.first,y=temp.first.second,dx=delta[i][0],dy=delta[i][1],status=map[x][y];
                step[x][y]=temp.second;
                if(1<=x+dx && x+dx<=N && 1<=y+dy && y+dy<=M && map[x+dx][y+dy]!=status && trace[x+dx][y+dy]==-1)
                {
                    target.push({{x+dx,y+dy},i+1});
                    trace[x+dx][y+dy]=trace[x][y]+1;
                }
            }
        }
        if(trace[N][M]==-1)
        {
            cout<<-1<<endl;
        }
        else
        {
            cout<<trace[N][M]-1<<endl;
            string ans;
            while(M!=1 || N!=1)
            {
                char s='\0';
                switch(step[N][M])
                {
                    case 1:s='D';break;
                    case 2:s='R';break;
                    case 3:s='U';break;
                    case 4:s='L';break;
                }
                int dx=delta[step[N][M]-1][0],dy=delta[step[N][M]-1][1];
                N-=dx;
                M-=dy;
                ans+=s;
            }
            for(int i=ans.size()-1;i>=0;i--)
            {
                cout<<ans[i];
            }
            cout<<endl;
        }
    }
    return 0;
}
2024/11/26 10:30
加载中...