Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- struct node{
- int data;
- struct node *up;
- struct node *down;
- struct node *left;
- struct node *right;
- };
- typedef struct node nodeT;
- nodeT arr[40010];
- bool visited[40010];
- bool check(nodeT* node,int I,int J){
- if(node == NULL)return true;
- if(I < 1 || J < 1)return false;
- int u = node->data;
- if(visited[u])return true;
- // printf("check Test %d %d %d\n",u,I,J);
- visited[u] = true;
- // printf("Test line\n");
- 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);
- }
- int ans[210][210];
- void buildg(nodeT* node,int I,int J){
- if(ans[I][J] != -1)return;
- if(node == NULL)return;
- ans[I][J] = node->data;
- // printf("Build Test %d %d %d\n",node->data,I,J);
- buildg(node->up,I-1,J);
- buildg(node->down,I+1,J);
- buildg(node->left,I,J-1);
- buildg(node->right,I,J+1);
- }
- int main()
- {
- for(int i=0;i<210;i++)for(int j=0;j<210;j++)ans[i][j] = -1;
- for(int i=0;i<40010;i++){
- arr[i].data = i;
- arr[i].up = NULL;
- arr[i].down = NULL;
- arr[i].left = NULL;
- arr[i].right = NULL;
- }
- int n,m;
- scanf("%d %d",&n,&m);
- for(int i = 1 ; i <= (m*n) - 1 ; i++){
- int u,v;
- char d;
- scanf("%d %c %d",&u,&d,&v);
- switch(d){
- case('U'):{
- arr[u].down = &arr[v];
- arr[v].up = &arr[u];
- break;
- }
- case('L'):{
- arr[u].right = &arr[v];
- arr[v].left = &arr[u];
- break;
- }
- }
- // printf("%d %c %d\n",u,d,v);
- }
- for(int i=0;i<= (m*n) - 1; i++){
- if(arr[i].up == NULL && arr[i].left == NULL){
- // printf("test %d\n",i);
- for(int j=0;j<40010;j++){
- visited[j] = false;
- }
- if(check(&arr[i],1,1)){
- // ans[1][1] = i;
- // printf("Test %d\n",i);
- buildg(&arr[i],1,1);
- break;
- }
- }
- }
- // return 0;
- for(int i=1;i<=n;i++){
- for(int j=1;j<=m;j++){
- printf("%d ",ans[i][j]);
- }
- printf("\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement