Почему мой алгоритм для вычисления выходных данных матрицы смежности '8', когда должны использоваться только 0 и 1?

0

Я делаю программу графика прямо сейчас, но она еще не закончена, это о моем вопросе раньше (о матрице края в графе с использованием c++), и это примерная программа

#include <iostream>

using namespace std;

int main()
{
   int n, m = 0, i, j, k, l;
   cout << "How many vertex in graph : ";
   cin >> n;
   cout << endl << endl;

   int A[n][n], A1[n][n];

   for(i = 1; i <= n; i++)
      for(j = 1; j <= n; j++)
      {
         cout << "A[" << i << "][" << j << "] = ";
         cin >> A[i][j];
         if (A[i][j] == 1)
            m++;
      }

   for(i = 1; i <= n; i++)
      for(j = 1; j <= n; j++)
         A1[i][j] = A[i][j];

   m = m / 2;
   int B[m][m];
   cout << endl << "Adjacency Matrix A : " << endl;
   /* Problem
   for(i = 1; i <= n; i++)
      for(j = 1; j <= n; j++)
      {
        cout << A[i][j] << " ";
        if(j == n)
            cout << endl;
      }
   */
   cout << endl;

   /* Problem maker
   for(i = 1; i <= n; i++) 
      for(j = 1; j <= n; j++)
        if(A1[i][j] == 1)
        {
            for(k = 1; k <= n; k++)
                for(l = 1; l <= n; l++)
                    if(A1[k][l] == 1)
                    {
                        if(k == i && l == j)
                            B[i][j] == 0;
                        else if (k == j  && l == i)
                            A1[k][l] == 0;
                        else if(k == i || k == j || l == i || l == j)
                            B[i][j] == 1;
                        else
                            B[i][j] == 0;
                    }
        }*/

и, если я вводим последовательно 0,1,1,1,0,0,1,0,0. Я абсолютно уверен, что результат:

0 1 1
1 0 0
1 0 0

но это дает:

0 1 1
1 0 0
1 0 8

Эта часть, где я понятия не имею, я думаю, что это вызывает /*Problem maker. Я знаю, что я не понимаю c++ достаточно хорошо, но для /*Problem части я уверен, что все правильно. Несмотря на то, что /*Problem maker не прав по своим алгоритмам или что-то еще, он не связан с правой частью /*Problem?

Если я удалил часть /*Problem maker, выход будет хорошо и красиво.

  • 0
    Что особенного в этой ошибке?
  • 0
    Какова точка этой линии A1[i][j] = A[i][j];
Показать ещё 17 комментариев
Теги:

1 ответ

2
Лучший ответ

В int A[n][n] ;

A может быть пройден только для всех строк, начиная с i = 0 to n-1 для всех столбцов, начиная с j = 0 to n-1

Доступ к A[n][n] вызывает неопределенное поведение

Конечно, вы можете исправить это разными подходами

  • 0
    Кстати, это работает, но мне интересно, почему это произошло, если я думаю, что проблема только в размерности, то нет разницы между 0 к n-1 и 1 - n.
  • 0
    Я думаю, что с A [1] [1] до A [n] [n] имеет значение 0 или 1, и игнорирую A [0] [0], это не проблема, потому что я печатаю только от 1 до n, но проблема в том, исправлено @ P0W, но сама «причина» не исправлена. Может быть, вы можете объяснить больше?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню