Почему выводится в ответ мусор, то есть большие отрицательные числа и как исправить
У меня есть задача - вывести матрицу смежности для простого ориентированного графа. Мне во входном файле(entrance.txt) в первой строке первое число - это число вершин моего графа(n), а в первой строке второе число - это количество пар ребер моего графа(m). Дальше в следующих строках мне даны просто ребра, которые есть в моем графе. Мне нужно это все считать с входного файла, построить матрицу смежности для этого графа, и вывести эту матрицу смежности в выходной файл(escape.txt). Входной файл:
3 4 // 3 - число вершин, 4 - количество пар ребер
//все, что ниже, это ребра
1 2
2 3
3 1
3 2
Выходной файл:
0 1 0
0 0 1
1 1 0
Я написал программу, там я создал динамический массив, в который добавил все ребра моего графа, и создал двумерный динамический массив, в котором будет матрица смежности. С помощью цикла while я заполнил матрицу смежности, т.е. двумерный динамический массив. После цикла while идет цикл for и там я проверяю - если у меня элемент матрицы смежности равен 1, то я просто иду к следующему элементу. В противном случае - я записываю туда 0. Этот цикл for нужен, так как в цикле while я заполнил двумерный массив только 1. Однако мне в выходной файл, выводит мусор:
-842150451 -842150451 -842150451
-842150451 -842150451 -842150451
-842150451 -842150451 -842150451
Он мне показывает 4 предупреждения:
"==": результат выражения не используется; вы хотели использовать "="?
"==": результат выражения не используется; вы хотели использовать "="?
Использование неинициализированной памяти "*adjacency_matrix[i]"
Использование неинициализированной памяти "adjacency_matrix[i][j]"
Вот мой код:
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("entrance.txt");
ofstream out("escape.txt");
int main() {
int n;
in >> n;
int m;
in >> m;
int i = 1;
int j = 1;
int k = 0;
int counter = 0;
int** adjacency_matrix = new int* [n];
for (int i = 0; i < n; i++) {
adjacency_matrix[i] = new int[n];
}
int* array_ribs = new int [m * 2];
for (int i = 0; i < m * 2; i++) {
in >> array_ribs[i];
}
while (counter <= m * n) {
if (array_ribs[k] == i && array_ribs[k + 1] == j) {
adjacency_matrix[i - 1][j - 1] == 1;
j++;
if (j == n) {
j = 1;
i++;
}
}
else {
k = k + 2;
if (k == m * 2) {
k = 0;
j++;
if (j == n) {
j = 1;
i++;
}
}
}
counter++;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (adjacency_matrix[i][j] == 1) {
continue;
}
else {
adjacency_matrix[i][j] == 0;
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
out << ' ' << adjacency_matrix[i][j];
}
out << endl;
}
delete[] array_ribs;
for (int i = 0; i < n; i++) {
delete[] adjacency_matrix[i];
}
delete[] adjacency_matrix;
return 0;
}
Что не так, и как это исправить?