[HDU - 1241]Oil Deposits

也是很简单的DFS水题,就跟求有多少连通块差不多。(只有上下左右四个方向有联通才是连通块)

复制代码
#include<cstdio>
#include <cstring>
using namespace std;
int m, n,cnt = 0;
char A[101][101];
int vis[101][101];

void dfs(int i, int j)
{
    if(i < 0|| j < 0|| i >= m|| j >= n || vis[i][j] || A[i][j] != '@')
        return;
    else
    {
        //这里当然也可以开一个dic数组用for来遍历,但是这个是我早期代码,只是做个归档故不再优化。
        vis[i][j] = 1;
        dfs(i-1, j-1);
        dfs(i-1, j);
        dfs(i-1, j+1);
        dfs(i, j-1);
        dfs(i, j+1);
        dfs(i+1, j-1);
        dfs(i+1, j);
        dfs(i+1, j+1);//dfs的精髓!
        //这道题就不需要重置了,因为油田不能重复出现
    }

}


int main()
{
    while(~scanf("%d%d", &m, &n) && (m+n))
    {
        cnt = 0;
        memset(A, 0, sizeof(A));
        memset(vis, 0, sizeof(vis));
        for(int i = 0; i < m; ++i)
            scanf("%s", A[i]);

        for(int i = 0; i < m; ++i)
            for(int j = 0; j < n; ++j)
                if(!vis[i][j] && A[i][j] == '@')
                    dfs(i, j),cnt++;
        printf("%d\n", cnt);
    }
}
复制代码

 

posted @   ViKyanite  阅读(117)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示
主题色彩