Submission
Status:
[-SSSSSSSSSSSSS]
Subtask/Task Score:
{0/100}
Score: 0
User: navysrimuang
Problemset: anna
Language: cpp
Time: 0.002 second
Submitted On: 2026-03-18 19:44:10
#include<bits/stdc++.h>
using namespace std;
using T = tuple<int, string, int, int>;
const int INF = 1e8;
int best = INF;
//dijkstra with sliding and string
char tushar[] = {'d','l','r','u'};
int dr[] = {1,0,0,-1};
int dc[] = {0,-1,1,0};
int n,m;
int sr,sc,er,ec;
priority_queue<T, vector<T>, greater<T>> pq;
vector<string> ans;
void solve(){
cin >> n >> m;
vector<vector<int>> g(n+2,vector<int>(m+2,1));
vector<vector<int>> dist(n+2,vector<int>(m+2,INF));
for(int i = 1;i<=n;i++) for(int j = 1;j<=m;j++) cin >> g[i][j];
cin >> sr >> sc >> er >> ec;
sr++; sc++; er++; ec++;
dist[sr][sc] = 0;
pq.push({0,"",sr,sc});
while(pq.size()){
auto [t,s,r,c] = pq.top();
pq.pop();
if(t > dist[r][c]) continue;
for(int i = 0;i<4;i++){
int nr = r; int nc = c;
int cnt = 0;
while(true){
int tr = nr+dr[i]; int tc = nc+dc[i];
if(tr < 1 || tr > n || tc < 1 || tc > m) break;
if(g[tr][tc]) break;
cnt++;
nr = tr;
nc = tc;
if(nr == er && nc == ec){
string ns = s+tushar[i];
if(t+cnt < best){
best = t+cnt;
ans.clear();
ans.push_back(ns);
}else if(t+cnt == best){
ans.push_back(ns);
}
break;
}
}
if(cnt == 0) continue;
string ns = s+tushar[i];
if(t + cnt <= dist[nr][nc]){
dist[nr][nc] = t + cnt;
pq.push({dist[nr][nc],ns,nr,nc});
}
}
}
if(ans.empty()){
cout << "NO\n";
return;
}
sort(ans.begin(),ans.end());
cout << ans[0] << "\n";
}
int main(){
cin.tie(0)->sync_with_stdio(0);
solve();
return 0;
}