nguyentruong98

Untitled

Dec 8th, 2018
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.03 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. typedef struct node
  5. {
  6.       int vertex;
  7.       struct node *next;
  8. } Node;
  9. typedef struct queue
  10. {
  11.       Node *head;
  12. } Queue;
  13. typedef struct stack
  14. {
  15.       Node *head;
  16.       Node *tail;
  17. } Stack;
  18. Node *makeNode(int vertex)
  19. {
  20.       Node *p = (Node *)malloc(sizeof(Node));
  21.       p->vertex = vertex;
  22.       p->next = NULL;
  23.       return p;
  24. }
  25. void printfnode(Node *p)
  26. {
  27.       if (p == NULL)
  28.             return;
  29.       printf("%d\n", p->vertex);
  30. }
  31. Node* top(Stack *s)
  32. {
  33.       return s->tail;
  34. }
  35. Stack* makeStack()
  36. {
  37.       Stack *s;
  38.       s = (Stack *)malloc(sizeof(Stack));
  39.       s->head = NULL;
  40.       s->tail = NULL;
  41.       return s;
  42. }
  43. void popStack(Stack *s)
  44. {
  45.       Node* iterator;
  46.       if(s->tail == NULL)
  47.       {
  48.             printf("ERROR STACK");
  49.             return;
  50.       }
  51.       if(s->head == s->tail)
  52.       {
  53.             s->head = NULL;
  54.             s->tail = NULL;
  55.             return;
  56.       }
  57.       iterator = s->head;
  58.       while (iterator->next != s->tail)
  59.       {
  60.             iterator = iterator->next;
  61.       }
  62.       iterator->next = NULL;
  63.       s->tail = iterator;
  64.       return;
  65. }
  66. void pushStack(Stack *s, int vertex)
  67. {
  68.       Node *newNode = makeNode(vertex);
  69.       if(s->head == NULL)
  70.       {
  71.             s->head = newNode;
  72.             s->tail = newNode;
  73.             return;
  74.       }
  75.       s->tail->next = newNode;
  76.       s->tail = newNode;
  77.       return;
  78. }
  79. Node *frontQueue(Queue *q)
  80. {
  81.       if (q->head == NULL)
  82.             return NULL;
  83.       return q->head;
  84. }
  85. Queue *makeQueue()
  86. {
  87.       Queue *q;
  88.       q = (Queue *)malloc(sizeof(Queue));
  89.       q->head = NULL;
  90.       return q;
  91. }
  92. void popQueue(Queue *q)
  93. {
  94.       Node *tmp;
  95.       if (q->head == NULL)
  96.       {
  97.             printf("ERROR QUEUE\n");
  98.             return;
  99.       }
  100.       tmp = q->head;
  101.       q->head = q->head->next;
  102.       free(tmp);
  103. }
  104. void pushQueue(Queue *q, int vertex)
  105. {
  106.       Node *newNode = makeNode(vertex);
  107.       Node *iterator;
  108.       if (q->head == NULL)
  109.       {
  110.             q->head = newNode;
  111.             return;
  112.       }
  113.       iterator = q->head;
  114.       while (iterator->next != NULL)
  115.       {
  116.             iterator = iterator->next;
  117.       }
  118.       iterator->next = newNode;
  119.       return;
  120. }
  121. int main()
  122. {
  123.       Queue *q = makeQueue();
  124.       int m = 0, n = 0;
  125.       FILE *f;
  126.       f = fopen("data1.txt", "r");
  127.       if (f == NULL)
  128.       {
  129.             printf("ERROR\n");
  130.       }
  131.       else
  132.       {
  133.       fscanf(f, "%d %d", &n, &m);
  134.       }
  135.       int map[n+1][m+1];
  136.       if (f == NULL)
  137.       {
  138.             printf("ERROR\n");
  139.       }
  140.       else
  141.       {
  142.       for(int i = 1; i <= n ; i++){
  143.             for(int j = 1; j <= m ; j++)
  144.             {
  145.                   fscanf(f, "%d", &map[i][j]);
  146.                   printf("map[%d][%d] = %d\n", i,j, map[i][j] );
  147.             }
  148.       }
  149.       }
  150.       int start = 0, end = 0;
  151.       fscanf(f, "%d %d", &start, &end);
  152.       printf("%d %d", start, end);
  153.       fclose(f);
  154.       for(int i = 1; i <= n; i++){
  155.             if(map[n+1][m+1] == 1)
  156.             pushQueue(q, i);
  157.             if(map[n+1][m+1] == end)
  158.             break;
  159.       }
  160.       return 0;
  161. }
Advertisement
Add Comment
Please, Sign In to add comment