侧边栏
首页代码

爬山王 连通块(dfs深度搜索)

#include<bits/stdc++.h>
using namespace std;
int dx[] = {0, 1, -1, 0};
int dy[] = {1, 0, 0, -1};
int a[100][100];
int n, m, ans;
void dfs(int x, int y)
{
    int nx, ny;
    a[x][y] = 0;
    ans = max(n - x, ans);
    for(int i = 0;i < 4;i++)
    {
        nx = x + dx[i];
        ny = y + dy[i];
        if(nx >= 0 && nx < n && ny >= 0 && ny < m && a[nx][ny])
            dfs(nx, ny);
        else
            continue;
    }
}
int main()
{
    while(cin >> n >> m)
    {
        ans = 0;
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < m;j++)
            {
                cin >> a[i][j];
            }
        }
        for(int i = 0;i < m;i++)
        {
            if(a[n - 1][i])
                dfs(n - 1,i);
        }
        printf("%d\n",ans);
    }
    return 0;
}
posted @ 2020-12-03 20:39  AlexStraightUp  阅读(36)  评论(0)    收藏  举报
页脚HTML代码