我想写一个函数来检查矩阵是否是循环的。
如果一个方阵的每一个元素(第一个除外)都是通过将前一行循环向右移动一个位置而获得的,那么它就是圆形的。
#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))。你能解释一下为什么打印错误的结果以及如何修复吗?