

Link bài:
Thuật toán:
Code:
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[i][j] != 2 && a[i][j] != -1 && a[i][j] != 1){
a[i][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[i][0] = a[i][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[i][j];
doit(y, x);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (a[i][j] == 2) ans++;
cout << ans;
return 0;
}