Как я могу получить свой код для вывода ненулевых элементов из матрицы? - PullRequest
0 голосов
/ 01 января 2019

У меня есть матрица смежности, с которой я пытаюсь работать (не в теории графов, а в вычислительной физике), и я собрал воедино некоторые вещи, которые я копил по всему Интернету в C ++, что и является остальной частью проектанаписано в. Я определил произвольную матрицу смежности (9x9), и я пытаюсь получить ненулевые элементы каждой строки в вектор.Я получаю следующий результат, 1 1 1 1 1 1 6 1 6 1 6, когда я запускаю этот код:

  int x[9][9] = 
{{0,1,0,0,0,0,1,0,0},{1,0,0,1,0,0,0,0,1},{0,0,0,0,1,1,0,0,0}, 
{0,1,0,0,0,0,0,0,0},{0,0,1,0,0,0,0,0,0},{0,0,1,0,0,0,0,0,0}, 
{1,0,0,0,0,0,0,1,0},{0,0,0,0,0,0,1,0,0},{0,1,0,0,0,0,0,0,0}};

{
 vector<int> col;
    for (int j = 0; j < 9; j++)

    {
        if (x[0][j] == 1)
        {
            col.push_back(j);
        }
        else{}
        std::copy(col.begin(), col.end(), 
        std::ostream_iterator<int>(std::cout, " "));

Я ожидаю получить 1 6, и хотя это только два целых числа вПолученный результат, я запутался, почему это не просто «1 6».Есть ли какая-либо ошибка, которую я здесь пропускаю, или какой-либо другой способ получить желаемый результат ненулевых элементов из составляющих массивов?

1 Ответ

0 голосов
/ 01 января 2019

Вы должны перебрать массивы матрицы и их значения, поэтому посмотрите:

#include <iostream>
#include <vector>
#include <iterator>

  int x[9][9] = 
    {{0,1,0,0,0,0,1,0,0},{1,0,0,1,0,0,0,0,1},{0,0,0,0,1,1,0,0,0}, 
    {0,1,0,0,0,0,0,0,0},{0,0,1,0,0,0,0,0,0},{0,0,1,0,0,0,0,0,0}, 
    {1,0,0,0,0,0,0,1,0},{0,0,0,0,0,0,1,0,0},{0,1,0,0,0,0,0,0,0}};

int main() {
    for (int j = 0; j < 9; j++){ // loop over matrix's arrays
        std::vector<int> col;
        for (int i = 0; i < 9; i++) { // loop over array
            if (x[j][i] == 1) {
                col.push_back(i);
            }
            //else{}
        }
        std::cout << "Array index: " << j << std::endl;
        std::copy(col.begin(), col.end(), 
        std::ostream_iterator<int>(std::cout, " "));
        std::cout << std::endl;
    }
}

output:

Array index: 0
1 6
Array index: 1
0 3 8
Array index: 2
4 5
Array index: 3
1
Array index: 4
2
Array index: 5
2
Array index: 6
0 7
Array index: 7
6
Array index: 8
1
...