HDU-1241-Oil Deposits

来源:互联网 发布:行情分析软件 编辑:程序博客网 时间:2024/06/01 07:53

HDU-1241-Oil Deposits


题目链接:HDU-1241

题目思路:在一个矩阵里,有些格子是‘@’,有些不是,相邻(上、下、左、右、左上、右上、左下、右下)的格子如果也是‘@’,那么他们属于同一个矿井,问总共有多少个矿井。

题目思路:DFS,求连通块个数。

以下是代码:

#include <vector>#include <map>#include <set>#include <algorithm>#include <iostream>#include <cstdio>#include <cmath>#include <cstdlib>#include <string>#include <cstring>using namespace std;string s[101];int vis[105][105];int flag = 0;int m,n;void dfs(int c,int r){    if (c >= m || c < 0 || r >= n || r < 0) return;    if (vis[c][r] || s[c][r] != '@') return;    vis[c][r] = 1;    if (s[c][r] == '@') flag = 1;    for (int i = -1; i <= 1; i++)    {        for (int j = -1; j <= 1; j++)        {            if (i == 0 && j == 0) continue;            dfs(c + i,r + j);        }    }}int main(){    while(cin >> m >> n)    {        if (m == 0 && n == 0) break;        for (int i = 0; i < m; i++)        {            cin >> s[i];        }        int ans = 0;        memset(vis,0,sizeof(vis));        for (int i = 0; i < m; i++)        {            for (int j = 0; j < n; j++)            {                if (s[i][j] == '@')                {                    dfs(i,j);                    if (flag) ans++;                    flag = 0;                }             }        }        cout << ans << endl;    }     return 0;}
0 0
原创粉丝点击