Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.63 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. #define MAX_SIZE 100
  6.  
  7. typedef struct node {
  8.     char *data;
  9.     int number;
  10.     int list_size;
  11.     struct node **list;
  12.     unsigned char color;
  13.  
  14. } NODE;
  15.  
  16. int getNumberLen(int number) {
  17.     int len = 0;
  18.     while (number % 10 != 0) {
  19.         number /= 10;
  20.         len++;
  21.     }
  22.  
  23.     return len + 1;
  24. }
  25.  
  26. NODE *create_node(int number) {
  27.     NODE *node = (NODE *) malloc(sizeof(NODE));
  28.     node->number = number;
  29.     node->data = (char *) malloc(sizeof(char) * MAX_SIZE);
  30.     node->list_size = 0;
  31.     node->list = (NODE **) malloc(sizeof(NODE **) * MAX_SIZE);
  32.     node->color = 'W';
  33.     return node;
  34. }
  35.  
  36. void add_node_to_list(NODE *node, NODE *element) {
  37.     node->list[node->list_size++] = element;
  38. }
  39.  
  40. int dfs(int current, int finish, NODE* nodes, int* path, int path_len) {
  41.     nodes[current].color = 'B';
  42.     path[path_len++] = current;
  43.  
  44.     if (current == finish) {
  45.         for (int i = 0; i < path_len; i++)
  46.             printf("%d ", path[i] + 1);
  47.         printf("\n");
  48.         return 1;
  49.     }
  50.  
  51.     for (int i = 0; i < nodes[current].list_size; i++) {
  52.         if (nodes[current].list[i]->color == 'W') {
  53.             int code = dfs(nodes[current].list[i]->number - 1, finish, nodes, path, path_len);
  54.             if (code == 1) return 1;
  55.         }
  56.     }
  57.  
  58.     return 0;
  59. }
  60.  
  61.  
  62. int main() {
  63.     FILE *file_input = fopen("input.txt", "r");
  64.  
  65.     NODE nodes[MAX_SIZE];
  66.     for (int i = 0; i < MAX_SIZE; i++) nodes[i] = *create_node(i + 1);
  67.  
  68.     int nodes_count = 0;
  69.  
  70.     char s[MAX_SIZE];
  71.     while (fgets(s, MAX_SIZE, file_input) != NULL) {
  72.         char *data = (char *) malloc(sizeof(char) * MAX_SIZE);
  73.  
  74.         int i = 1;
  75.         while (s[i - 1] >= 48 && s[i - 1] <= 57) i++;
  76.  
  77.         int j = 0;
  78.         char temp = s[i];
  79.  
  80.         if (temp == '"') i++;
  81.         while (s[i] != (temp == '"' ? '"' : ' '))
  82.             data[j++] = s[i++];
  83.         if (temp == '"') i++;
  84.  
  85.         for (int k = 0; k < MAX_SIZE; k++) {
  86.             nodes[nodes_count].data[k] = data[k];
  87.         }
  88.  
  89.         i++;
  90.  
  91.         int number;
  92.         while ((number = atoi(s + i)) != 0) {
  93.             i += getNumberLen(number);
  94.             add_node_to_list(&nodes[nodes_count], &nodes[number - 1]);
  95.         }
  96.  
  97.         nodes_count++;
  98.     }
  99.  
  100.     int path[MAX_SIZE], path_len = 0;
  101.     int start, finish;
  102.  
  103.     printf("Enter start point: ");
  104.     scanf("%d", &start);
  105.     printf("Enter finish point: ");
  106.     scanf("%d", &finish);
  107.  
  108.     int code = dfs(start - 1, finish - 1, nodes, path, path_len);
  109.     if (!code) {
  110.         printf("no solution\n");
  111.     }
  112.  
  113.     return 0;
  114. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement