Hai ma trận đồng nhất (identical) khi: cùng kích thước (số hàng, số cột) VÀ tất cả phần tử tương ứng bằng nhau.
Thuật toán
- Kiểm tra kích thước:
rows1 == rows2 && cols1 == cols2. - Duyệt từng phần tử
(i, j), so sánharr1[i,j] == arr2[i,j]. - Nếu có bất kỳ cặp nào khác → không đồng nhất, dừng sớm (early exit).
Mã nguồn
using System;
namespace Demo {
public class ApplicationOne {
public static void Main() {
Console.Write("Hàng ma trận 1: "); int row1 = int.Parse(Console.ReadLine());
Console.Write("Cột ma trận 1: "); int col1 = int.Parse(Console.ReadLine());
Console.Write("Hàng ma trận 2: "); int row2 = int.Parse(Console.ReadLine());
Console.Write("Cột ma trận 2: "); int col2 = int.Parse(Console.ReadLine());
if (row1 != row2 || col1 != col2) {
Console.WriteLine("Hai ma trận KHÔNG thể so sánh (kích thước khác nhau).");
return;
}
int[,] arr1 = new int[row1, col1];
int[,] arr2 = new int[row2, col2];
Console.WriteLine("Nhập ma trận 1:");
for (int i = 0; i < row1; i++)
for (int j = 0; j < col1; j++) {
Console.Write($"Phần tử [{i},{j}]: ");
arr1[i, j] = int.Parse(Console.ReadLine());
}
Console.WriteLine("Nhập ma trận 2:");
for (int i = 0; i < row2; i++)
for (int j = 0; j < col2; j++) {
Console.Write($"Phần tử [{i},{j}]: ");
arr2[i, j] = int.Parse(Console.ReadLine());
}
bool identical = true;
for (int i = 0; i < row1 && identical; i++) {
for (int j = 0; j < col1; j++) {
if (arr1[i, j] != arr2[i, j]) {
identical = false;
break;
}
}
}
Console.WriteLine(identical ? "Hai ma trận ĐỒNG NHẤT!" : "Hai ma trận KHÁC NHAU!");
}
}
}
Kết quả mẫu
Hàng ma trận 1: 2
Cột ma trận 1: 2
Hàng ma trận 2: 2
Cột ma trận 2: 2
Nhập ma trận 1:
Phần tử [0,0]: 1
Phần tử [0,1]: 2
Phần tử [1,0]: 3
Phần tử [1,1]: 4
Nhập ma trận 2:
Phần tử [0,0]: 1
Phần tử [0,1]: 2
Phần tử [1,0]: 3
Phần tử [1,1]: 4
Hai ma trận ĐỒNG NHẤT!
Cách LINQ (ngắn gọn, cho mảng 1D hoặc flatten)
// Với mảng 2D, cần flatten trước
bool identical = arr1.Cast().SequenceEqual(arr2.Cast());
// Hoặc
bool identical = Enumerable.SequenceEqual(
arr1.Cast(), arr2.Cast());
Lưu ý
- Code gốc có lỗi logic:
if (row1 != row2 && col1 != col2)— sai, phải dùng||(OR). Đã sửa. - Code gốc hardcode mảng size 10x10 — đã đổi thành dynamic theo input.
- Dùng
breakthoát sớm khi tìm thấy khác biệt (tối ưu). - Với ma trận lớn, cân nhắc
Memory<T>,Span<T>, hoặc unsafe pointer so sánh block memory.