Выяснить, есть ли среди N населенных пунктов изолированные города - C (СИ) (158059)

Узнай цену своей работы

Формулировка задачи:

Пожалуйста! помогите отладить 2 программы, они рабочие, но в коде есть мелкие ошибки, которые я не могу исправить. Заранее спасибо. 1)Имеются N населённых пунктов (N≤15), и сеть авиалиний, соединяющих эти города. Сеть задана матрицей связности M(N, N), где M(i, j)=0, если города i и j не связаны между собой, и M(i, j)=l - в противном случае. Выяснить, есть ли среди N населенных пунктов изолированные города (такие, в которые нельзя долететь).
#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;
}
2)Дана матрица B(N,M) (N≤M, M≤13). Найти сумму элементов каждого столбца матрицы. Сформировать массив D из найденных сумм.
#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));

Объяснение кода листинга программы

  1. В коде выделяется память для массива D типа int, размер которого равен M*sizeof(int).
  2. Значение M — количество населенных пунктов, а тип int — это целое число, которое будет использоваться для хранения информации о населенных пунктах.
  3. Каждому населенному пункту будет присвоено уникальное значение от 0 до M-1, которое будет храниться в массиве D.
  4. Присваивание значения 0 будет означать, что данный населенный пункт является изолированным городом.
  5. Значение M-1 будет означать, что данный населенный пункт не является изолированным городом.
  6. Для определения, является ли какой-либо населенный пункт изолированным городом, будет использоваться алгоритм двоичного поиска, который будет искать значение 0 в массиве D.
  7. Если значение 0 будет найдено, то населенный пункт с таким значением будет считаться изолированным городом.
  8. Если значение 0 не будет найдено, то населенный пункт с таким значением будет считаться неизолированным городом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4 из 5
Похожие ответы