Giải bài ntucoder OCSE - Ốc sên ăn rau

Thảo luận trong 'Khác' bắt đầu bởi nguyen minh duc, 28 Tháng sáu 2023.

  1. nguyen minh duc

    Bài viết:
    28
    Link bài:

    Thuật toán:


    • Ta dùng thuật toán quay lui để đánh dấu tất lan dần cả các ô mà ốc sên có thể đi đến.
    • Nếu các ô đó có rau thì ốc sên măm măm rồi đi tiếp.

    Code:

    Mã:
    #include <bits/stdc++.h>
    using namespace std;
    
    int n, m, y, x, ans, a[107][107];
    
    void doit(int i, int j){
        if (a[j] != 2 && a[j] != -1 && a[j] != 1){
            a[j] = 2;
            doit(i+1, j);
            doit(i-1, j);
            doit(i, j+1);
            doit(i, j-1);
        }
    }
    
    int main(){
        ios_base::sync_with_stdio(0);
        cin.tie(0); cout.tie(0);
        //freopen("ocse.inp", "r", stdin);
        //freopen("ocse.out", "w", stdout);
        cin >> n >> m >> y >> x;
        for (int i = 0; i <= n+1; i++) a[0] = a[m+1] = -1;
        for (int j = 1; j <= m; j++) a[0][j] = a[n+1][j] = -1;
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++) cin >> a[j];
        doit(y, x);
        for (int i = 1; i <= n; i++)
            for (int j = 1; j <= m; j++)
                if (a[j] == 2) ans++;
        cout << ans;
        
        return 0;
    }
     
Trả lời qua Facebook
Đang tải...