Где ошибка?Маленькая программа на си.Построить матрицу инцидентности по заданной матрице смежности ориентированного графа
Напишите программу вычисления матрицы инцидентности орграфа по заданной матрице смежности.
Помогите пожалуйста, совсем запутался.Почему 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++;
}
}
}
Вывод программы:
- Матрица смежности квадратная NxN, поэтому ввод и использование двух размеров неверно
- Матрица инцидентности объявлена 10x10, инициализирована как 5x5, а вообще её размер должен быть NxE, где E - число дуг, которое может достигать N^2 (если параллельных дуг нет), для его определения стоит посчитать единичка в матрице смежности (при вводе), или использовать vector, добавляя по столбцу
Если эти недочёты исправить - вдруг заработает?
Ага, Павел ещё if с = заметил
