POJ - 1979 Red and Black (dfs+染色)

POJ - 1979 Red and Black (dfs+染色)

点击进入原题
####个人觉得这道题其实就是要算连续的 ‘.’ 的个数,然后有 ‘#’ 阻挡了。
####思路:搜索@确定开始的位置,把@变为 ’#‘;然后查找四个方向找 ‘.’ 并逐个变为 ’#‘ ; 定义全局变量按时加以计数,最后打印出答案,emmm因为有可能出现多个例子所以ans得记得初始化为0;

#include <iostream>
using namespace std;

int w,h,ans=0;
char a[21][21];

void dfs(int i, int j){
    a[i][j]='#';ans++;
    //查找四个方向
    if (a[i+1][j]=='.'&&(i+1)<w)dfs(i+1,j);
    if (a[i-1][j]=='.'&&(i-1)>=0)dfs(i-1,j);
    if (a[i][j+1]=='.'&&(j+1)<h)dfs(i,j+1);
    if (a[i][j-1]=='.'&&(j-1)>=0)dfs(i,j-1);
    return ;
}
int main()
{
    while(cin >> h >> w)
    {
        if (w==0&&h==0) return 0;
        for (int i=0;i<w;i++){
            for(int j=0;j<h;j++){
                cin >> a[i][j];
            }
        }
        for (int i=0;i<w;i++){
            for(int j=0;j<h;j++){
                if (a[i][j]=='@') dfs(i,j);
            }
        }
        cout<< ans<<endl;
        ans=0;
    }
}

这个算法真有点厉害,递归很厉害,自己写了出来超级开心哈哈哈,emmm毕竟是前天刚学的,今天一开始还有点忘记了,,惭愧。
–2020.02.12

发布了2 篇原创文章 · 获赞 1 · 访问量 434

猜你喜欢

转载自blog.csdn.net/Mei_Tou_Nao_/article/details/104283334