В чем разница между этими фрагментами кода дополнения графа?

Я использовал этот фрагмент кода для получения дополнения к моему графику —

for(i = 1; i <= n; i++)
{
for(j = 1; j <= n; j++)
{
if(i != j)
{
graph[i][j] = 1 - graph[i][j];
}
}
}

Это дает неправильный ответ. Но когда я заменяю его следующим фрагментом, он принимается

for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
if(graph[i][j] == 1)
graph[i][j] = 0;
else if(i != j)
graph[i][j] = 1;
}
}

Я не могу понять разницу между этими двумя.

0

Решение

этот:

if(i!=j)
{
graph[i][j]= 1-graph[i][j];
}

это не то же самое, что это:

if(graph[i][j] == 1)    graph[i][j] = 0;
else if(i != j)         graph[i][j] = 1;

В первом вы модифицируете матрицу, чтобы она была 1-N везде, кроме диагонали.

Учитывая эту матрицу:

 1 1 0
1 1 0
1 1 0

Первый код даст вам:

 1 0 0
0 1 0
0 0 0

Второе даст вам:

 0 0 1
0 0 1
0 0 0
1

Другие решения

Попробуй это:

for(i = 1; i <= n; i++) {
for(j = 1; j <= n; j++) {
if(i != j || graph[i][j] == 1) {
graph[i][j] = 1 - graph[i][j];
}
}
}

Вы просто не добавили код graph[i][j] == 1

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector