1241水dfs连接在一起的算一个

//这题经典dfs,不过告诉我一个道理,方向什么的列举好了,写数组循环容易各种智障犯错误,,,,
#include <iostream>
#include <stdio.h>
using namespace std;

char map[101][101];
int n, m, sum;

void dfs(int i, int j)
{
    //若该点不可行或越界,返回
    if(map[i][j]!='@' || i<0 || j<0 || i>=m || j>=n) return;    
    else    //否则,标记该点为不可行,再往8个方向深搜
    {
        map[i][j] = '!';
        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);
    }
}

int main()
{
    int i, j;
    while(cin>>m>>n)
    {
        if(m==0 || n==0) break;
        sum = 0;
        for(i = 0; i < m; i++)
            for(j = 0; j < n; j++)
                cin>>map[i][j];
        for(i = 0; i < m; i++)
        {
            for(j = 0; j < n; j++)
            {
                if(map[i][j] == '@')
                {
                    dfs(i, j);
                    sum++;
                }
            }
        }
        cout<<sum<<endl;
    }

    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40061421/article/details/79969505
今日推荐