Главная / Программирование на языке C в Microsoft Visual Studio 2010 / Необходимо решить задачу поиска пути между двумя городами. Карта дорог представлена в виде графа: [картинка]Процесс поиска представлен как последовательность шагов. На каждом шаге с использованием некоторого критерия выбирается точка, в котороую можно поп

Необходимо решить задачу поиска пути между двумя городами. Карта дорог представлена в виде графа: filesПроцесс поиска представлен как последовательность шагов. На каждом шаге с использованием некоторого критерия выбирается точка, в котороую можно попасть из текущей. Если очередная выбранная точка совпала с заданной конечной точкой, то маршрут найден. Если не совпала - выполняется еще один шаг. Поскольку текущая точка может быть соединена с несколькими другими, то сначала выбирается точка с наименьшим номером. Для решения задачи задана программа (для появснения в программе приведены комментарии): #define N 8 void step(int, int, int); int map[N][N]; // карта: map[i,j]!=0, если точки i и j соединены int road[N]; // маршрут - номера точек карты int incl[N]; // incl[i]==1, если точка с номером i включена в road int start; // начальная точка маршрута int finish; // конечная точка маршрута int i, j; int main (void) { // инициализация массивов for (i=1; i<=N; i++) road[i] = 0; for (i=1; i<=N; i++) incl[i] = 0; for (i=1; i<=N; i++) for (j=1; j<=N; j++) map[i][j] = 0; // ввод значений элементов карты map[1][2] = 1; map[2][1] = 1; map[1][3] = 1; map[3][1] = 1; map[1][4] = 1; map[4][1] = 1; map[3][4] = 1; map[4][3] = 1; map[3][7] = 1; map[7][3] = 1; map[4][6] = 1; map[6][4] = 1; map[5][6] = 1; map[6][5] = 1; map[5][7] = 1; map[7][5] = 1; map[6][7] = 1; map[7][6] = 1; printf("Введите через пробел номер начальной и конечной точек: "); scanf("%d %d", &start, &finish); road[1] = start; // внести точку в маршрут incl[1] = 1; // пометить точку как включенную step(start, finish, 2); return 0; } void step(int s, int f, int p) { int c; // номер точки, в которую делается очередной шаг int i; if (s==f) { printf("Путь: "); for (i=1; i<=p-1; i++) printf("%d ", road[i]); printf("\n"); } else { // выбор очередной точки for (c=1; c<=N; c++) // проверка всех вершин if (map[s][c]!=0 && incl[c]==0) { // точка соединена с текущей и не включена в маршрут <Рекурсивный вызов - вариант 1> road[p] = c; // добавление вершины в путь incl[c] = 1; // пометка вершины как включенной <Рекурсивный вызов - вариант 2> incl[c] = 0; road[p] = 0; <Рекурсивный вызов - вариант 3> } } } В каком из отмеченных мест программы необходимо выполнить рекурсивный вызов функции step(c, f, p+1);?

вопрос

Правильный ответ:

в строке Рекурсивный вызов - вариант 1
в строке Рекурсивный вызов - вариант 2
в строке Рекурсивный вызов - вариант 3
Сложность вопроса
82
Сложность курса: Программирование на языке C в Microsoft Visual Studio 2010
62
Оценить вопрос
Очень сложно
Сложно
Средне
Легко
Очень легко
Комментарии:
Аноним
Спасибо за тесты по интуиту.
31 авг 2020
Аноним
Зачёт сдал. Мчусь отмечать отмечать победу над тестом интут
10 сен 2016
Аноним
Если бы не данные ответы - я бы не осилил c этими тестами intuit.
19 май 2016
Оставить комментарий
Другие ответы на вопросы из темы программирование интуит.