DontCallMeNuttoPleas

Map

May 5th, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. bool used[40100];
  4. int l[40100],u[40100],d[40100],r[40100];
  5. using pipii=pair<int,pair<int,int>>;
  6. int board[210][210];
  7. int main(){
  8.     int n,m;
  9.     scanf("%d%d",&n,&m);
  10.     for(int i=0;i<n*m;i++){
  11.         l[i]=-1;
  12.         u[i]=-1;
  13.         r[i]=-1;
  14.         d[i]=-1;
  15.     }
  16.    
  17.     for(int i=0;i<(n*m)-1;i++){
  18.         int x,z;
  19.         char c;
  20.         cin >> x >> c >> z;
  21.         if(c=='U'){
  22.             u[z]=x;
  23.             d[x]=z;
  24.         }
  25.         else{
  26.             l[z]=x;
  27.             r[x]=z;
  28.         }
  29.         used[z]=true;
  30.     }
  31.    
  32.     queue<int> s;
  33.     for(int i=0;i<n*m;i++){
  34.         if(!used[i]){
  35.             s.push(i);
  36.         }
  37.     }
  38.    
  39.     while(!s.empty()){
  40.         vector<bool> visited(n*m+10,false);
  41.         int cnt=0;
  42.         int st=s.front();
  43.         s.pop();
  44.         queue<pipii> q;
  45.         q.push({st,{0,0}});
  46.         while(!q.empty()){
  47.             int a=q.front().first;
  48.             int b=q.front().second.first;
  49.             int c=q.front().second.second;
  50.             q.pop();
  51.             if(visited[a]) continue;
  52.             visited[a]=true;
  53.             board[b][c]=a;
  54.             if(b!=0&&u[a]!=-1&&!visited[u[a]]) q.push({u[a],{b-1,c}});
  55.             if(c!=0&&l[a]!=-1&&!visited[l[a]]) q.push({l[a],{b,c-1}});
  56.             if(b!=n-1&&d[a]!=-1&&!visited[d[a]]) q.push({d[a],{b+1,c}});
  57.             if(c!=m-1&&r[a]!=-1&&!visited[r[a]]) q.push({r[a],{b,c+1}});
  58.             cnt++;
  59.         }
  60.         if(cnt==n*m){
  61.             for(int i=0;i<n;i++){
  62.                 for(int j=0;j<m;j++){
  63.                     printf("%d ",board[i][j]);
  64.                 }
  65.                 cout << endl;
  66.             }
  67.             break;
  68.         }
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment