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

Đếm tất cả số 0 bị chặn bởi số 1 trong ma trận nhị phân trong C++


Trong hướng dẫn này, chúng ta sẽ thảo luận về chương trình tìm số lượng số 0 bị chặn bởi số 1 trong ma trận nhị phân.

Chúng ta sẽ được cung cấp một ma trận nhị phân. Nhiệm vụ của chúng ta là tìm và đếm tất cả các số 0 trong ma trận bị chặn bởi số 1.

Ví dụ

#include <iostream>
using namespace std;
#define Row 4
#define Col 5
int r[4] = { 0, 0, 1, -1 };
int c[4] = { 1, -1, 0, 0 };
bool isSafe(int x, int y, int M[][Col]) {
    if (x >= 0 && x <= Row && y >= 0 &&
        y <= Col && M[x][y] == 0)
        return true;
    return false;
}
//thực hiện DFS trong ma trận
void DFS(int x, int y, int M[][Col]) {
    //đánh dấu nút đã thăm
    M[x][y] = 1;
    for (int k = 0; k < 4; k++)
        if (isSafe(x + r[k], y + c[k], M))
            DFS(x + r[k], y + c[k], M);
}
//trả về số lượng số 0 bị chặn
int CountAllZero(int M[][Col]){
    for (int i = 0; i < Col; i++)
        if (M[0][i] == 0)
            DFS(0, i, M);
    for (int i = 0; i < Col; i++)
        if (M[Row - 1][i] == 0)
            DFS(Row - 1, i, M);
    for (int i = 0; i < Row; i++)
        if (M[i][0] == 0)
            DFS(i, 0, M);
    for (int i = 0; i < Row; i++)
        if (M[i][Col - 1] == 0)
            DFS(i, Col - 1, M);
//đếm tất cả số 0 bị bao quanh bởi 1
    int result = 0;
    for (int i = 0; i < Row; i++)
        for (int j = 0; j < Col; j++)
            if (M[i][j] == 0)
                result++;
    return result;
}
int main(){
    int M[][Col] = { { 1, 1, 1, 0, 1 },{ 1, 0, 0, 1, 0 },{ 1, 0, 1, 0, 1 },{ 0, 1, 1, 1, 1 } };
    cout << CountAllZero(M) << endl;
    return 0;
}

Kết quả

4