Выяснить, есть ли среди N населенных пунктов изолированные города - C (СИ) (158059)
Формулировка задачи:
Пожалуйста! помогите отладить 2 программы, они рабочие, но в коде есть мелкие ошибки, которые я не могу исправить. Заранее спасибо.
1)Имеются N населённых пунктов (N≤15), и сеть авиалиний, соединяющих эти города. Сеть задана матрицей связности M(N, N), где M(i, j)=0, если города i и j не связаны между собой, и M(i, j)=l - в противном случае. Выяснить, есть ли среди N населенных пунктов изолированные города (такие, в которые нельзя долететь).
2)Дана матрица B(N,M) (N≤M, M≤13). Найти сумму элементов каждого столбца матрицы. Сформировать массив D из найденных сумм.
#include <stdio.h> //Сюда пишем сколько надо городов, но помним, что N<= 15 #define kolichestvo_gorodov 11 int main () { int j, k, i; //матрица связности, это матрица ОБЯЗАНА быть симметричной относительно диагонали, //которая идёт от левого верхнего угла к правому нижнему углу bool N [kolichestvo_gorodov] [kolichestvo_gorodov]= { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //для проверки: // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; // // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; //Решение задачи заключается в том, чтобы найти нулевые столбцы (или строки, без разницы) //Номера таких столбцов или строк и будут номерами искомых городов //В этот массив будем вписывать номера городов. Теоретически их может быть kolichestvo_gorodov //(в нашем случае 11) int goroda_bez_svazi [kolichestvo_gorodov]; //Обязательно обнуляем этот массив for (int i= 0; i< kolichestvo_gorodov; i++) { goroda_bez_svazi [i]= kolichestvo_gorodov; } //Заполняем k= 0; for (int i= 0; i< kolichestvo_gorodov; i++) { for (j= 0; j< kolichestvo_gorodov && !N [i] [j]; j++) { } if (j== kolichestvo_gorodov) goroda_bez_svazi [k++]= i; } //массив сформирован, осталось только вывести его //Выводим до первого нулевого элемента или до конца (если все города без связи) if (goroda_bez_svazi [0]== kolichestvo_gorodov) { printf ("Vse goroda so svazu\n"); getchar (); return 0; } else { j= 0; printf ("Nomera gorodov bez svazu\n"); do { printf ("%d ", goroda_bez_svazi [j++]); } while (j!= kolichestvo_gorodov && goroda_bez_svazi [j]!=11); } printf ("\n"); getchar (); return 0; }
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int M = 0, N = 0; int i=0; int j=0, **B, *D; printf("Введите число M в десятичной системе считсления: "); scanf("%d", &M); printf("Введите число N в десятичной системе считсления: "); scanf("%d", &N); if(M > 13 || M == 0) { printf("Число М имеет неверное значение\n"); system("pause"); return -1; } if(N > M || N == 0) { printf("Число N имеет неверное значение\n"); system("pause"); return -1; } // Создание динамического двумерного массива // Сначала выделяется память под N указателей // Затем в цикле каждому указателю вектор размером M **B = (int**)malloc(N*sizeof(int*)); for ( i = 0; i < N; i++) B[i] = (int*)malloc(M*sizeof(int)); // Заполнение матрицы случайными значениями for ( i = 0; i < N; i++) for (j = 0; j < M; j++) B[i][j] = rand()%10; // Вывод матрицы printf("Исходная матрица\n"); for ( i = 0; i < N; i++) { for (j = 0; j < M; j++) printf("%d\t", B[i][j]); printf("\n"); } // Выделяем память под массив *D = (int*)malloc(M*sizeof(int)); // Подсчет суммы и одновременный вывод printf("\nПодсчет сумм\n"); for( i = 0; i < M; i++) { D[i] = 0; for(j = 0; j < N; j++) { D[i] += B[j][i]; } printf("%d столбец: %d\n", (i+1), D[i]); } // Освобождаем выделенную память free(D); // Освобождение выделенной памяти // Для каждого malloc свой free! for ( i = 0; i != N; ++i) free(B[i]); free(B); getch(); return 0; }
вопрос ещё актуален.
помощь ещё нужна...чем быстрее тем лучше)
Решение задачи: «Выяснить, есть ли среди N населенных пунктов изолированные города»
textual
Листинг программы
D = (int*)malloc(M*sizeof(int));
Объяснение кода листинга программы
- В коде выделяется память для массива D типа int, размер которого равен M*sizeof(int).
- Значение M — количество населенных пунктов, а тип int — это целое число, которое будет использоваться для хранения информации о населенных пунктах.
- Каждому населенному пункту будет присвоено уникальное значение от 0 до M-1, которое будет храниться в массиве D.
- Присваивание значения 0 будет означать, что данный населенный пункт является изолированным городом.
- Значение M-1 будет означать, что данный населенный пункт не является изолированным городом.
- Для определения, является ли какой-либо населенный пункт изолированным городом, будет использоваться алгоритм двоичного поиска, который будет искать значение 0 в массиве D.
- Если значение 0 будет найдено, то населенный пункт с таким значением будет считаться изолированным городом.
- Если значение 0 не будет найдено, то населенный пункт с таким значением будет считаться неизолированным городом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д