代码之家  ›  专栏  ›  技术社区  ›  Rocket Procd

检查矩阵是否为圆形

  •  0
  • Rocket Procd  · 技术社区  · 4 年前

    我想写一个函数来检查矩阵是否是循环的。

    如果一个方阵的每一个元素(第一个除外)都是通过将前一行循环向右移动一个位置而获得的,那么它就是圆形的。

    #include <iostream>
    #include <deque>
    bool CircularMatrix(std::deque < std::deque < double >> & a) {
      int columns = a[0].size();
      for (int i = 1; i < a.size(); i++)
        if (a[i].size() != columns)
          return false;
      for (int i = 1; i < a.size(); i++) {
        for (int j = 0; j < columns; j++) {
          std::cout << "(" << i << "," << j << ")" << a[i][j] << " ";
          if (j == 0) {
            if (a[i][j] != a[i - 1][columns - 1]) return false;
          } else {
            if (a[i][j] != a[i - i][j - 1]) {
              std::cout << "(" << i << "," << j << ")" << a[i][j] << " ";
              return false;
            }
          }
        }
        std::cout << "\n";
      }
      return true;
    }
    int main() {
      std::deque<std::deque<double>>a{
      {1,2,3},
      {3,1,2},
      {2,3,1}};
      std::cout << CircularMatrix(a);
      return 0;
    }
    

    输出:

    (1,0)3 (1,1)1 (1,2)2

    (2,0)2 (2,1)3 (2,1)3 0

    所以,矩阵的最后一个元素打印错误。它应该是(2,2)1(因此结果应该是1(true),而不是0(false))。你能解释一下为什么打印错误的结果以及如何修复吗?

    1 回复  |  直到 4 年前
        1
  •  1
  •   pm100    4 年前

    你的错误就在这里

    if (a[i][j] != a[i - i][j - 1]) {
    ---------------------^
    

    应该是

    if (a[i][j] != a[i - 1][j - 1]) {