ZeroJudge E513: Symmetric Matrix

同題: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

發佈留言