Conversation
feat: functions for obtaining information about the state fix: algorithm
| printf("\n\nTest failed!\n\n"); | ||
| return -1; | ||
| } | ||
| int (*dist)[CITIES] = malloc(CITIES * sizeof * dist); |
There was a problem hiding this comment.
Это типа двумерный массив? Если я без идей, как это компилируется, то лучше так не писать :) Ну и не сокращайте имена никогда.
| } | ||
|
|
||
| int visited[100] = { 0 }; | ||
| int capitals[100]; |
There was a problem hiding this comment.
Неинициализированные массивы запрещены стайлгайдом
| int m = 0; | ||
| int k = 0; | ||
|
|
||
| const char filename[100] = "file.txt"; |
There was a problem hiding this comment.
| const char filename[100] = "file.txt"; | |
| const char filename[] = "file.txt"; |
Вам же не важно, что именно 100
| int n = 0; | ||
| int m = 0; | ||
| int k = 0; |
There was a problem hiding this comment.
Я там выше писал "не сокращайте имена", не догадываясь об этом ужасе. Даже если n, m и k были в условии, им в программе стоит дать говорящие и понятные имена, чтобы при чтении программы не надо было условие искать
|
|
||
| const char filename[100] = "file.txt"; | ||
| readFromFile(filename, &n, &m, &k, capitals, dist); | ||
| State* arrayWithState[100]; |
There was a problem hiding this comment.
Тут тоже надо не забыть проинициалиизровать
| void printStates(State** states, int k); | ||
|
|
||
| // Floyd-Warshell algorithm | ||
| void floydWarshall(int n, int dist[][CITIES]); |
There was a problem hiding this comment.
Тут тоже. Хотя бы runFloydWarshall. И в комментарии опечатка в названии алгоритма
|
|
||
| void initializationOfStates(State** arrayWithStates, int* capitals, int* visited, int k) { | ||
| for (int i = 0; i < k; i++) { | ||
| visited[capitals[i]] = 1; |
There was a problem hiding this comment.
visited мог бы быть булевым, судя по всему
| void initializationOfStates(State** arrayWithStates, int* capitals, int* visited, int k) { | ||
| for (int i = 0; i < k; i++) { | ||
| visited[capitals[i]] = 1; | ||
| arrayWithStates[i] = (State*)malloc(sizeof(State)); |
| void distributeCities(State** arrayWithStates, int n, int dist[][CITIES], int* visited, int k) { | ||
| for (int i = 0; i < n - k; ++i) { | ||
| for (int q = 0; q < k; ++q) { | ||
| int nearestCity = findNearestCity(arrayWithStates[q], n, dist, visited); |
There was a problem hiding this comment.
Просто ближайший город согласно предпосчитанной матрице дистанций брать нельзя, потому что кратчайший путь уже может быть занят другим государством. Например, положим, у нас две столицы, 1 и 2, и такой граф: (1) -- (2) -- ( ) -- ( ) — по условию задачи два свободных города должны отойти государству 2, у Вас один из них достанется 1. Тут алгоритм должен быть интеллектуальнее раза в два.
|
|
||
| initializationOfStates(arrayWithState, capitals, visited, k); | ||
| floydWarshall(n, dist); | ||
| distributeCities(arrayWithState, n, dist, visited, k); |
There was a problem hiding this comment.
Что-то мы такой код уже видели в main. Вдруг в main ошибка? Тест её не поймает. Сделали бы отдельную функцию "взять граф из файла и посчитать", и её бы уже проверяли.
No description provided.