Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Biến đổi thành bàn cờ (Transform to Chessboard) trong C++

Cho ma trận N x N chỉ chứa 0 và 1. Mỗi phép phép trao đổi 2 hàng bất kỳ hoặc 2 cột bất kỳ. Tìm số phép tối thiểu để biến thành bàn cờ (xen kẽ 0,1). Không thể thì trả về -1.

Điều kiện cần đủ

  1. Mọi hình chữ nhật 2x2 phải có XOR 4 góc = 0 (tức là số 1 chẵn).
  2. Số 1 trên hàng đầu và cột đầu phải bằng N/2 hoặc (N+1)/2.

Tính số phép trao đổi

  • Đếm rowSwap: số hàng đầu tiên khác với mẫu xen kẽ (0,1,0,1...).
  • Đếm colSwap: số cột đầu tiên khác với mẫu xen kẽ.
  • Nếu N lẻ: số phép phải chẵn, điều chỉnh rowSwap = min(rowSwap, N-rowSwap) tương tự cột.
  • Kết quả = (rowSwap + colSwap) / 2.

Chương trình C++

#include <bits/stdc++.h>
using namespace std;

class Solution {
public:
    int movesToChessboard(vector<vector<int>>& b) {
        int n = b.size();
        // Kiểm tra điều kiện XOR
        for(int i=0; i