洛谷 题解 UVA572 【油田 Oil Deposits】

这是我在洛谷上的第一篇题解!!!!!!!!

这个其实很简单的

我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见

#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<algorithm>
using namespace std;
char f[501][501];//霸气的开始潇洒自信
int js=0;
int n=-1,m=-1;
void ac(int x,int y)
{
    if(x<0 || y<0 || x>n || y>m)//发现是边界就返回上一层 
    return;//边界 

    f[x][y]='*';
    if(f[x+1][y+1]=='@'){ac(x+1,y+1);}//八个方向各个开始寻找 
    if(f[x-1][y-1]=='@'){ac(x-1,y-1);}//找到就继续从找的的开始找 
    if(f[x+1][y-1]=='@'){ac(x+1,y-1);}
    if(f[x-1][y+1]=='@'){ac(x-1,y+1);}
    if(f[x][y+1]=='@'){ac(x,y+1);}
    if(f[x][y-1]=='@'){ac(x,y-1);}
    if(f[x+1][y]=='@'){ac(x+1,y);}
    if(f[x-1][y]=='@'){ac(x-1,y);}
}
int main()
{
    while(cin>>n>>m)
    {
        memset(f,0,sizeof(f));//因为不去定有多少组数所以用这个 
        js=0;//必须清零不然上一层的结果会影响现在的 
        if(n==0 && m==0)//结束条件 
        {
            return 0;
        }
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<=m;++j)
            {
                cin>>f[i][j];//超级正常的输入 
            }
        }
        for(int i=1;i<=n;++i)
        {
            for(int j=1;j<=m;++j)
            {
                if(f[i][j]=='@')//找到第一个就开始从这个开始找 
                {
                    js++;//油区数量加一 
                    ac(i,j);
                }
            }
        }
        cout<<js<<endl;//输出 
    }
    return 0;//完美的结束潇洒自信
}

猜你喜欢

转载自www.cnblogs.com/acioi/p/11295039.html
今日推荐