Сравнить матрицы умножения - PullRequest
1 голос
/ 25 июня 2010

Я должен умножить матрицу сам по себе, пока матрица в некоторой степени не станет равной одной из предыдущих матриц.Тогда мне нужно получить значения степеней, в которых матрицы равны.Количество строк и столбцов равно.Матрица хранится в двумерном массиве.Значения равны 0 или 1. Как лучше всего проверить равенство с предыдущими матрицами?Я пытался использовать vector для хранения матриц:

vector<int[5][5]> m;

, но получил ошибку cannot convert from 'const int [5][5]' to 'int [5][5]'.

В ожидании совета.

Ответы [ 2 ]

3 голосов
/ 25 июня 2010

Если вы можете использовать boost , посмотрите на повышение Matrix class:

Кажется, отсутствует оператор ==, но его легко добавить:

#include <iostream>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>

using namespace boost::numeric::ublas;

template<typename T>
bool operator==(const matrix<T>& m, const matrix<T>& n)
{
  bool returnValue = 
    (m.size1() == n.size1()) &&
    (m.size2() == n.size2());

  if (returnValue)
  {
    for (unsigned int i = 0; returnValue && i < m.size1(); ++i)
    {
      for (unsigned int j = 0; returnValue && j < m.size2(); ++j)
      {
        returnValue &= m(i,j) == n(i,j);
      }
    }
  }
  return returnValue;
}

И используется так:

int main ()
{

  matrix<double> m (3, 3);
  for (unsigned int i = 0; i < m.size1(); ++ i)
  {
    for (unsigned int j = 0; j < m.size2(); ++ j)
    {
      m (i, j) = 3 * i + j;
    }
  }
  std::cout << m << std::endl;

  matrix<double> n (3, 3);

  std::cout << (m == n) << std::endl;
  std::cout << (m == m) << std::endl;
}

[Код]

1 голос
/ 25 июня 2010

Если вы хотите сделать это с vector, вы, вероятно, захотите vector < vector < int > >, то есть вектор векторов целых чисел (то есть вид двумерного вектора).

vector<int[5][5]> объявит (если это сработает) вектор двумерных 5x5- int -массивов.

...