zoukankan      html  css  js  c++  java
  • 洛谷 题解 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;//完美的结束潇洒自信
    }
  • 相关阅读:
    Demo
    Demo
    z-yelir-~
    CSP考前总结
    NOIP刷题
    清北学堂
    qsing
    【csp模拟赛九】--dfs3
    【csp模拟赛九】--dfs2
    【csp模拟赛九】--dfs
  • 原文地址:https://www.cnblogs.com/acioi/p/11295039.html
Copyright © 2011-2022 走看看