# 題目: UVa 11360 - Have Fun with Matrices

# 題目說明

給一個 n * n 的矩陣,有以下 5 種指令可以控制矩陣變換,輸出執行完指令的矩陣

  1. row a b : 交換 row arow b
  2. col a b : 交換 col acol b
  3. inc : 將矩陣所有值 +1 後取 10 的餘數
  4. dec : 將矩陣所有值 -1 後取 10 的餘數
  5. transpose : 對矩陣進行轉置

INPUT:
第一行輸入一個整數 t ,代表測資數
每筆測資先輸入一個整數 n ,代表矩陣的大小
接下來輸入 n * n 個整數,代表矩陣的值
之後輸入一個整數 m ,代表指令數
接下來輸入 m 個字串


OUTPUT:
輸出執行完指令的矩陣

# 解題方法

先將矩陣的值存入二維陣列
之後隨著指令及時更動矩陣內的值
最後再將結果輸出即可

# 參考程式碼

#include <iostream>
#include <vector>
using namespace std;
static auto fast_io = []
{
	ios::sync_with_stdio(false);
	cout.tie(nullptr);
	cin.tie(nullptr);
	return 0;
}();
int main()
{
	int t, n, m, a, b, Case = 0;
	string str;
	cin >> t;
	while (t--)
	{
		cin >> n;
		vector<vector<int>> V(n, vector<int>(n));
		for (int i = 0, tmp; i < n; ++i)
		{
			cin >> tmp;
			for (int j = n - 1; j >= 0; --j)
			{
				V[i][j] = tmp % 10;
				tmp /= 10;
			}
		}
		cin >> m;
		while (m--)
		{
			cin >> str;
			if (str == "row")
			{
				cin >> a >> b;
				for (int i = 0; i < n; ++i)
					swap(V[a - 1][i], V[b - 1][i]);
			}
			else if (str == "col")
			{
				cin >> a >> b;
				for (int i = 0; i < n; ++i)
					swap(V[i][a - 1], V[i][b - 1]);
			}
			else if (str == "inc")
				for (int i = 0; i < n; ++i)
					for (int j = 0; j < n; ++j)
						V[i][j] = (V[i][j] + 1) % 10;
			else if (str == "dec")
				for (int i = 0; i < n; ++i)
					for (int j = 0; j < n; ++j)
						V[i][j] = (V[i][j] + 9) % 10;
			else
				for (int i = 0; i < n; ++i)
					for (int j = i + 1; j < n; ++j)
						swap(V[i][j], V[j][i]);
		}
		cout << "Case #" << ++Case << "\n";
		for (auto& i : V)
		{
			for (auto& j : i) cout << j;
			cout << "\n";
		}
		cout << "\n";
	}
}