Advertisement
SuitNdtie

Map

Apr 17th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1. #include<stdio.h>
  2.  
  3. struct node{
  4.     int data;
  5.     struct node *up;
  6.     struct node *down;
  7.     struct node *left;
  8.     struct node *right;
  9. };
  10. typedef struct node nodeT;
  11.  
  12. nodeT arr[40010];
  13. bool visited[40010];
  14. bool check(nodeT* node,int I,int J){
  15.     if(node == NULL)return true;
  16.     if(I < 1 || J < 1)return false;
  17.     int u = node->data;
  18.     if(visited[u])return true;
  19. //  printf("check Test %d %d %d\n",u,I,J);
  20.     visited[u] = true;
  21. //  printf("Test line\n");
  22.     return (I >= 1 && J >= 1) && check(node->up,I - 1 , J) && check(node->down,I + 1,J) && check(node->left,I,J-1) && check(node->right,I,J+1);
  23. }
  24.  
  25.  
  26. int ans[210][210];
  27. void buildg(nodeT* node,int I,int J){
  28.     if(ans[I][J] != -1)return;
  29.     if(node == NULL)return;
  30.     ans[I][J] = node->data;
  31. //  printf("Build Test %d %d %d\n",node->data,I,J);
  32.     buildg(node->up,I-1,J);
  33.     buildg(node->down,I+1,J);
  34.     buildg(node->left,I,J-1);
  35.     buildg(node->right,I,J+1);
  36. }
  37.  
  38. int main()
  39. {
  40.     for(int i=0;i<210;i++)for(int j=0;j<210;j++)ans[i][j] = -1;
  41.     for(int i=0;i<40010;i++){
  42.         arr[i].data = i;
  43.         arr[i].up = NULL;
  44.         arr[i].down = NULL;
  45.         arr[i].left = NULL;
  46.         arr[i].right = NULL;
  47.     }
  48.     int n,m;
  49.     scanf("%d %d",&n,&m);
  50.     for(int i = 1 ; i <= (m*n) - 1 ; i++){
  51.         int u,v;
  52.         char d;
  53.         scanf("%d %c %d",&u,&d,&v);
  54.         switch(d){
  55.             case('U'):{
  56.                 arr[u].down = &arr[v];
  57.                 arr[v].up = &arr[u];
  58.                 break;
  59.             }
  60.             case('L'):{
  61.                 arr[u].right = &arr[v];
  62.                 arr[v].left = &arr[u];
  63.                 break;
  64.             }
  65.         }
  66.     //  printf("%d %c %d\n",u,d,v);
  67.     }
  68.    
  69.     for(int i=0;i<= (m*n) - 1; i++){
  70.         if(arr[i].up == NULL && arr[i].left == NULL){
  71.         //  printf("test %d\n",i);
  72.             for(int j=0;j<40010;j++){
  73.                 visited[j] = false;
  74.             }
  75.             if(check(&arr[i],1,1)){
  76.             //  ans[1][1] = i;
  77.             //  printf("Test %d\n",i);
  78.                 buildg(&arr[i],1,1);
  79.                 break;
  80.             }
  81.         }
  82.     }
  83. //  return 0;
  84.     for(int i=1;i<=n;i++){
  85.         for(int j=1;j<=m;j++){
  86.             printf("%d ",ans[i][j]);
  87.         }
  88.         printf("\n");
  89.     }
  90.     return 0;
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement