Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_SIZE 100
- typedef struct node {
- char *data;
- int number;
- int list_size;
- struct node **list;
- unsigned char color;
- } NODE;
- int getNumberLen(int number) {
- int len = 0;
- while (number % 10 != 0) {
- number /= 10;
- len++;
- }
- return len + 1;
- }
- NODE *create_node(int number) {
- NODE *node = (NODE *) malloc(sizeof(NODE));
- node->number = number;
- node->data = (char *) malloc(sizeof(char) * MAX_SIZE);
- node->list_size = 0;
- node->list = (NODE **) malloc(sizeof(NODE **) * MAX_SIZE);
- node->color = 'W';
- return node;
- }
- void add_node_to_list(NODE *node, NODE *element) {
- node->list[node->list_size++] = element;
- }
- int dfs(int current, int finish, NODE* nodes, int* path, int path_len) {
- nodes[current].color = 'B';
- path[path_len++] = current;
- if (current == finish) {
- for (int i = 0; i < path_len; i++)
- printf("%d ", path[i] + 1);
- printf("\n");
- return 1;
- }
- for (int i = 0; i < nodes[current].list_size; i++) {
- if (nodes[current].list[i]->color == 'W') {
- int code = dfs(nodes[current].list[i]->number - 1, finish, nodes, path, path_len);
- if (code == 1) return 1;
- }
- }
- return 0;
- }
- int main() {
- FILE *file_input = fopen("input.txt", "r");
- NODE nodes[MAX_SIZE];
- for (int i = 0; i < MAX_SIZE; i++) nodes[i] = *create_node(i + 1);
- int nodes_count = 0;
- char s[MAX_SIZE];
- while (fgets(s, MAX_SIZE, file_input) != NULL) {
- char *data = (char *) malloc(sizeof(char) * MAX_SIZE);
- int i = 1;
- while (s[i - 1] >= 48 && s[i - 1] <= 57) i++;
- int j = 0;
- char temp = s[i];
- if (temp == '"') i++;
- while (s[i] != (temp == '"' ? '"' : ' '))
- data[j++] = s[i++];
- if (temp == '"') i++;
- for (int k = 0; k < MAX_SIZE; k++) {
- nodes[nodes_count].data[k] = data[k];
- }
- i++;
- int number;
- while ((number = atoi(s + i)) != 0) {
- i += getNumberLen(number);
- add_node_to_list(&nodes[nodes_count], &nodes[number - 1]);
- }
- nodes_count++;
- }
- int path[MAX_SIZE], path_len = 0;
- int start, finish;
- printf("Enter start point: ");
- scanf("%d", &start);
- printf("Enter finish point: ");
- scanf("%d", &finish);
- int code = dfs(start - 1, finish - 1, nodes, path, path_len);
- if (!code) {
- printf("no solution\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement