同題:UVa 11349 – Symmetric Matrix
現在給你一個正方形矩陣 M。
M 矩陣的元素為M[i][j]:{0 < i < N,0 < j < N}。
在這個問題中,您必須找出給定的矩陣是否對稱 (Symmetric)。
定義:對稱矩陣所有元素都是非負的並且相對於該矩陣的中心對稱。
任何其他矩陣都被認為是非對稱的。
你要做的就是判斷這個矩陣是否對稱。
矩陣內的元素範圍為 -232 <= M[i][j] <= 232 且 0 < N <= 100。
範例測資
範例輸入 | 範例輸出 |
---|---|
輸入的第一行包含一個數字 T (T <= 300),代表測資的數量。 每組測試資料的第一行包含兩個字元一個整數 N,N 代表這個正方矩陣的維度。 接下來的 N 行即為這個矩陣內的元素數值。 每一列 i 有 N 個數字,第i列的第j個數字即是M[i][j]。 | 對每一筆測試資料輸出一行「Test #t: S」,t 為第幾筆測試資料的編號,S 為答案字串。 如果輸入的矩陣是對稱矩陣,S = 「Symmetric」。 如果輸入的矩陣不是對稱矩陣,S =「Non-symmetric」。 |
2 N = 3 5 1 3 2 0 2 3 1 5 N = 3 5 1 3 2 0 2 0 1 5 | Test #1: Symmetric. Test #2: Non-symmetric. |
解題思路
本題需使用 Long Long Int 來存矩陣中的資料,收資料的時候如果有收到小於 0 的數字,可以預設一個布林值,之後就不用進行判斷。
可以將矩陣中的資料收成一維陣列,然後判斷這個一維陣列是否是迴文,這樣就可以判斷這個矩陣是否是對稱的。
範例程式碼-ZeroJudge E513: Symmetric Matrix
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
cin.sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for (int i = 0; i<N; i++)
{
char a, b;
int M;
cin >> a >> b >> M;
vector<long long int>num;
bool negative = false;
for (int j = 0; j<M; j++)
{
for (int k = 0; k<M; k++)
{
long long int tmp;
cin >> tmp;
num.push_back(tmp);
if (tmp < 0) negative = true;
}
}
if (!negative)
{
vector<long long int>tmp = num;
reverse(tmp.begin(), tmp.end());
if (tmp == num) cout << "Test #" << i+1 << ": Symmetric.\n";
else cout << "Test #" << i+1 << ": Non-symmetric.\n";
}
else cout << "Test #" << i+1 << ": Non-symmetric.\n";
}
}
//ZeroJudge E513
//Dr. SeanXD