nguyentruong98

Untitled

Dec 9th, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.48 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. int topStack(Stack *s)
  32. {
  33.       if(s->tail == NULL)
  34.       return NULL;
  35.       return s->tail->vertex;
  36. }
  37. Stack *makeStack()
  38. {
  39.       Stack *s;
  40.       s = (Stack *)malloc(sizeof(Stack));
  41.       s->head = NULL;
  42.       s->tail = NULL;
  43.       return s;
  44. }
  45. void popStack(Stack *s)
  46. {
  47.       Node *iterator;
  48.       if (s->tail == NULL)
  49.       {
  50.             printf("ERROR STACK");
  51.             return;
  52.       }
  53.       if (s->head == s->tail)
  54.       {
  55.             s->head = NULL;
  56.             s->tail = NULL;
  57.             return;
  58.       }
  59.       iterator = s->head;
  60.       while (iterator->next != s->tail)
  61.       {
  62.             iterator = iterator->next;
  63.       }
  64.       iterator->next = NULL;
  65.       s->tail = iterator;
  66.       return;
  67. }
  68. void pushStack(Stack *s, int vertex)
  69. {
  70.       Node *newNode = makeNode(vertex);
  71.       if (s->head == NULL)
  72.       {
  73.             s->head = newNode;
  74.             s->tail = newNode;
  75.             return;
  76.       }
  77.       s->tail->next = newNode;
  78.       s->tail = newNode;
  79.       return;
  80. }
  81. int frontQueue(Queue *q)
  82. {
  83.       if (q->head == NULL)
  84.             return NULL;
  85.       return q->head->vertex;
  86. }
  87. Queue *makeQueue()
  88. {
  89.       Queue *q;
  90.       q = (Queue *)malloc(sizeof(Queue));
  91.       q->head = NULL;
  92.       return q;
  93. }
  94. void popQueue(Queue *q)
  95. {
  96.       Node *tmp;
  97.       if (q->head == NULL)
  98.       {
  99.             printf("ERROR QUEUE\n");
  100.             return;
  101.       }
  102.       tmp = q->head;
  103.       q->head = q->head->next;
  104.       free(tmp);
  105. }
  106. void pushQueue(Queue *q, int vertex)
  107. {
  108.       Node *newNode = makeNode(vertex);
  109.       Node *iterator;
  110.       if (q->head == NULL)
  111.       {
  112.             q->head = newNode;
  113.             return;
  114.       }
  115.       iterator = q->head;
  116.       while (iterator->next != NULL)
  117.       {
  118.             iterator = iterator->next;
  119.       }
  120.       iterator->next = newNode;
  121.       return;
  122. }
  123. int main()
  124. {
  125.       Queue *q = makeQueue();
  126.       int m = 0, n = 0;
  127.       FILE *f;
  128.       f = fopen("data1.txt", "r");
  129.       if (f == NULL)
  130.       {
  131.             printf("ERROR\n");
  132.       }
  133.       else
  134.       {
  135.             fscanf(f, "%d %d", &n, &m);
  136.       }
  137.       int map[n + 1][m + 1];
  138.       if (f == NULL)
  139.       {
  140.             printf("ERROR\n");
  141.       }
  142.       else
  143.       {
  144.             for (int i = 1; i <= n; i++)
  145.             {
  146.                   for (int j = 1; j <= m; j++)
  147.                   {
  148.                         fscanf(f, "%d", &map[i][j]);
  149.                         printf("map[%d][%d] = %d\n", i, j, map[i][j]);
  150.                   }
  151.             }
  152.       }
  153.       int start = 0, end = 0;
  154.       int visitedarray[m+1];
  155.       int x;
  156.       for(x = 1; x <= m, x++)
  157.       {
  158.             visitedarray[x] = 0;
  159.       }
  160.       fscanf(f, "%d %d", &start, &end);
  161.       printf("%d %d", start, end);
  162.       fclose(f);
  163.       pushQueue(q, start);
  164.       while (q->head != NULL)
  165.       {
  166.             popQueue(q);
  167.             q->head = frontQueue(q);
  168.             for (int i = 1; i <= n; i++)
  169.             {
  170.                   if (map[n + 1][m + 1] == 1)
  171.                         pushQueue(q, i);
  172.                   if (map[n + 1][m + 1] == end)
  173.                         break;
  174.             }
  175.  
  176.       }
  177.  
  178.       return 0;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment