0289. Game Of Life
- Nhãn: Mảng, Ma trận, Mô phỏng
- Độ khó: Trung bình
Tóm tắt đề bài
Mô tả: Cho một ma trận hai chiều board
, mỗi ô trong ma trận đại diện cho một tế bào sống hoặc tế bào chết. Mỗi tế bào có hai trạng thái: sống () hoặc chết ().
Yêu cầu: Áp dụng các quy tắc sau để cập nhật trạng thái của tất cả các tế bào trong ma trận sau mỗi đơn vị thời gian:
- Bất kỳ tế bào sống nào có ít hơn hai tế bào sống xung quanh sẽ chết.
- Bất kỳ tế bào sống nào có hai hoặc ba tế bào sống xung quanh sẽ sống tiếp.
- Bất kỳ tế bào sống nào có nhiều hơn ba tế bào sống xung quanh sẽ chết.
- Bất kỳ tế bào chết nào có chính xác ba tế bào sống xung quanh sẽ sống lại.
Yêu cầu: Trả về trạng thái của ma trận sau khi đã cập nhật.
Giải thích:
- .
- .
- .
- là hoặc .
Ví dụ:
- Ví dụ 1:
- Ví dụ 2:
Ý tưởng giải quyết
Ý tưởng 1: Mô phỏng
Vì trạng thái tiếp theo của một ô tế bào phụ thuộc vào trạng thái của các ô xung quanh nó, nên không thể thay đổi trực tiếp trên ma trận ban đầu. Cần tạo một ma trận mới để lưu trữ trạng thái tiếp theo.
- Đầu tiên, duyệt qua từng ô trong ma trận ban đầu.
- Đối với mỗi ô, đếm số lượng ô sống xung quanh nó.
- Dựa vào số lượng ô sống xung quanh, cập nhật trạng thái tiếp theo của ô đó trong ma trận mới.
- Cuối cùng, gán ma trận mới cho ma trận ban đầu.
Ý tưởng 1: Code
Ý tưởng 1: Độ phức tạp
- Độ phức tạp thời gian: , trong đó và lần lượt là số hàng và số cột của ma trận.
- Độ phức tạp không gian: .