0
点赞
收藏
分享

微信扫一扫

算法提高之动态规划:BFS中的Flood Fill和最短路模型

自信的姐姐 2022-02-10 阅读 60

0、基础课中的bfs

在这里插入图片描述

1、Flood Fill

1.1、池塘计数

在这里插入图片描述
在这里插入图片描述

#include <cstring>
#include <iostream>
#include <algorithm>

#define x first
#define y second

using namespace std;
 
typedef pair<int, int> PII;

const int N = 1010, M = N * N;

int n, m;
char g[N][N];
PII q[M];
bool st[N][N];

void bfs(int sx, int sy)
{ 
    int hh = 0, tt = 0;
    q[0] = {sx, sy};
    st[sx][sy] = true;
    while (hh <= tt)
    {
        PII t = q[hh ++ ];

        for (int i = t.x - 1; i <= t.x + 1; i ++ )
            for (int j = t.y - 1; j <= t.y + 1; j ++ )
            {
                if (i == t.x && j == t.y) continue;
                if (i < 0 || i >= n || j < 0 || j >= m) continue;
                if (g[i][j] == '.' || st[i][j]) continue;
                q[ ++ tt] = {i, j};
                st[i][j] = true;
            }
    }
}

int main()
{
    scanf("%d%d", &n, &m); 
    for (int i = 0; i < n; i ++ ) scanf("%s", g[i]); 

    int cnt = 0;
    for (int i = 0; i < n; i ++ )
        for (int j = 0; j < m; j ++ )
            if (g[i][j] == 'W' && !st[i][j])
            {
                bfs(i, j);
                cnt ++ ;
            }
    printf("%d\n", cnt);
    return 0;
}

1.2、城堡问题

1.3、山峰和山谷

2、最短路模型

2.1、迷宫问题

2.2、武士风度的牛

2.3、抓住那头牛

举报

相关推荐

0 条评论