Где ошибка?Маленькая программа на си.Построить матрицу инцидентности по заданной матрице смежности ориентированного графа

Напишите программу вычисления матрицы инцидентности орграфа по заданной матрице смежности.

введите сюда описание изображения Помогите пожалуйста, совсем запутался.Почему k (кол-во столбцов матрицы B) = 10 при выводе, хотя должно быть 6.Объясните, что я упустил.И как осуществить такой алгоритм.Порядок столбцов в выводимой матрице не важен, главное - что бы их содержание было верным.И вообще выводит не совсем то, что нужно...

 #include <stdio.h>
    #include <Windows.h>
    #include <conio.h>
     
    int main()
    {
        int i, j,  X, Y;
        int a[100][100], u;
        int kor[2];
    
        printf("Enter the dimension of the matrix X =");
        scanf_s("%d", &X);
        printf("Enter the dimension of the matrix Y =");
        scanf_s("%d", &Y);
        for (i = 0; i < X; i++)
            for (j = 0; j < Y; j++)
            {
            
                printf("a[%d][%d]= ", i + 1, j + 1);
                if ((scanf_s("%d", &u)) != 0)
     
                    a[i][j] = u;
                
            }
        printf("The entered array: \n");
        for (i = 0; i < X; i++)
        {
            for (j = 0; j < Y; j++)
                printf("%d ", a[i][j]);
            printf("\n");
        }
     
    
        int k=0;
        int incidence[10][10] =
        {
        { 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 }
        };
     
     
        for (i = 0; i < X; i++){
    
            for (j = 0; j < Y; j++)
            {
                if (a[i][j] = 1 ){
                    if (i==j){
                        incidence[i][k] =2;
                        k++;
                break;    
                }
                    else{
                        incidence[i][k]= -1;
                        incidence[j][k]= 1;
                        k++;
                    }  
                 
                }
    
            
            }
        }
        printf("The output array: \n");
        for (i = 0; i < X; i++)
        {
            for (j = 0; j < k; j++)
                printf(" %5d ", incidence[i][j]);
            printf("\n");
        }
        system("pause");
        return 0;
    }

Ответы (2 шт):

Автор решения: Павел Ериков

Первая ошибка в строке:

if(a[i][j] = 1)

Эта условие будет всегда выполняться, так что я думаю тут нужно именно сравнивать ==, а не присваивать =.

Так же я не разбираюсь в графах, но зачем вы используете оператор break когда i == j?

И так же небольшая помарка. Вы можете k++ вынести за условия, т.к. в любом случае k увеличиться на единицу. И инициализировать статическую матрицу нулями можно в одной строчку: int incidence[10][10]{ 0 };

for (i = 0; i < X; i++) {
    for (j = 0; j < Y; j++) {
        if (a[i][j] == 1) {
            if (i == j)
                incidence[i][k] = 2;
            else {
                incidence[i][k] = -1;
                incidence[j][k] = 1;
            }
            k++;
        }
    }
}

Вывод программы:

Вывод

→ Ссылка
Автор решения: MBo
  1. Матрица смежности квадратная NxN, поэтому ввод и использование двух размеров неверно
  2. Матрица инцидентности объявлена 10x10, инициализирована как 5x5, а вообще её размер должен быть NxE, где E - число дуг, которое может достигать N^2 (если параллельных дуг нет), для его определения стоит посчитать единичка в матрице смежности (при вводе), или использовать vector, добавляя по столбцу

Если эти недочёты исправить - вдруг заработает?

Ага, Павел ещё if с = заметил

→ Ссылка