dfs、bfs基本テンプレート(フラッドフィル)

ここに画像の説明を挿入

#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;
const int N = 2010;
typedef pair<int, int> PII;
int n, m;
char g[N][N];
// int bfs(int sx, int sy)
// {
    
    
//     queue<PII> q;
//     q.push({sx, sy});
//     g[sx][sy] = '#';
//     int res = 0;
//     int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
//     while(q.size())
//     {
    
    
//         auto t = q.front();
//         q.pop();
//         res ++;
//         for(int i = 0; i < 4; i ++)
//         {
    
    
//             int x = t.x + dx[i];
//             int y = t.y + dy[i];
//             if(x < 0 || x >= n || y < 0 || y >= m || g[x][y] != '.')
//             continue; g[x][y] = '#'; q.push({x, y});
//         }
//     }
//     return res;
// }

int dx[4] = {
    
    -1, 0, 1, 0}, dy[4] = {
    
    0, 1, 0, -1};
int dfs(int x, int y) {
    
    
    int res = 1;
    g[x][y] = '#';
    for (int i = 0; i < 4; i++) {
    
    
        int a = x + dx[i], b = y + dy[i];
        if (a >= 0 && a < n && b >= 0 && b < m && g[a][b] == '.') {
    
    
            res += dfs(a, b);
        }
    }
    return res;
}
int main() {
    
    
    while (cin >> m >> n, n || m) {
    
    
        for (int i = 0; i < n; i++) cin >> g[i];
        int x, y;
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
                if (g[i][j] == '@') {
    
    
                    x = i, y = j;
                }
        // cout << bfs(x, y) << endl;
        cout << dfs(x, y) << endl;
    }
}

おすすめ

転載: blog.csdn.net/qq_47783181/article/details/112774164
おすすめ