Submission
Status:
PPPPPPP
Score: 100
User: Monasm
Problemset: Sirabyrinth 4
Language: cpp
Time: 0.002 second
Submitted On: 2024-11-22 00:42:43
#include <bits/stdc++.h>
using namespace std;
int gx[] = {1,-1,0,0};
int gy[] = {0,0,1,-1};
string op = "DURL";
int main(){
int n,m,px,py;cin>>n>>m;
vector<vector<char>> adj(n,vector<char>(m));
queue<pair<int,int>> q;
vector<vector<int>> v1(n,vector<int>(m,1e9));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
cin>>adj[i][j];
if(adj[i][j]=='S'){
px=i;py=j;
}
else if(adj[i][j]=='J'){
q.push({i,j});
}
}
}
int cnt = 0;
while(!q.empty()){
int size = q.size();
for(int i=0;i<size;i++){
int nx = q.front().first;
int ny = q.front().second;
if(v1[nx][ny]>cnt){
v1[nx][ny]=cnt;
}
q.pop();
for(int j=0;j<4;j++){
int x=gx[j]+nx,y=gy[j]+ny;
if(0<=x&&x<n&&0<=y&&y<m&&adj[x][y]!='#'&&v1[x][y]==1e9){
q.push({x,y});
}
}
}
cnt++;
}
q.push({px,py});cnt=0;
int con=0;
while(!q.empty()){
int size = q.size();
for(int i=0;i<size;i++){
int nx = q.front().first;
int ny = q.front().second;
q.pop();
if(nx==0||nx==n-1||ny==0||ny==m-1){
con=1;px=nx;py=ny;break;
}
for(int j=0;j<4;j++){
int x=gx[j]+nx,y=gy[j]+ny;
if(0<=x&&x<n&&0<=y&&y<m&&adj[x][y]=='.'&&v1[x][y]>cnt+1){
adj[x][y]=op[j];
q.push({x,y});
}
}
}
cnt++;
}
if(con){
string ans;
char s = adj[px][py];
while(s!='S'){
ans+=s;
for(int i=0;i<4;i++){
if(s==op[i]){
px-=gx[i];py-=gy[i];break;
}
}
s=adj[px][py];
}
reverse(ans.begin(),ans.end());
cout<<ans;
}
else{
cout<<"I5";
}
}