zoukankan      html  css  js  c++  java
  • luogu1451 求细胞数量

    这道题有挺多注意的点的,主要是新手还是要学习一个‘

    这是每次新开始的循环,第几次找,答案ans就是几,if语句满足判断才进行下一步

        for(int i=0;i<m;i++)//m=4
            for(int j=0;j<n;j++)//n=10
            {
                if(a[i][j])
                {
                    ans++;
                    dfs(i,j);
                }
            }

    dfs,有三个关键之处

    void dfs(int x,int y)
    {
        if(x<0||y<0||x>m||y>n) return;
        a[x][y]=0;
        for(int i=0;i<4;i++)
        {
            if (a[x+dx[i]][y+dy[i]])
                dfs(x+dx[i],y+dy[i]);//如果有才搜
        }
     } 

    1.

    递归转移

            if (a[x+dx[i]][y+dy[i]])
                dfs(x+dx[i],y+dy[i]);//如果有才搜

    要注意,在这一步,由于有4种(多种)可能,所以不能够改变x,y原有的数值

    不能写成

            x=+dx[i];
            y=+dy[i];
            if (a[x][y])
                dfs(x,y);

    这样比如,i=0的时候是一样的,

    可是如果再下一次,即i=1的时候,则是在i=0改变后的x,y再改变,

    而不是从原有的x,y转移而来

    2,

    在界内再搜索,只要满足界内就可以

    if(x<0||y<0||x>m||y>n) return;

    3.

    改变点的状态

    要把这个点清零

            a[x][y]=0;    

    其实在实际操作是213的顺序,可以说是途径型的典型

    在输入时有使用的技巧,确保每次输入一个

        scanf("%1d",&a[i][j]);    
    #include<bits/stdc++.h>
    using namespace std;
    
    int dx[4]={0,1,-1,0};
    int dy[4]={1,0,0,-1};
    int n,m;
    int ans;
    int a[110][110];
    
    void dfs(int x,int y)
    {
        if(x<0||y<0||x>m||y>n) return;
        a[x][y]=0;
        for(int i=0;i<4;i++)
        {
            if (a[x+dx[i]][y+dy[i]])
                dfs(x+dx[i],y+dy[i]);//如果有才搜
        }
     } 
    
    int main()
    {
        cin>>m>>n;
        for(int i=0;i<m;i++)//m=4
            for(int j=0;j<n;j++)//n=10
                {
                    scanf("%1d",&a[i][j]);
                }
        for(int i=0;i<m;i++)//m=4
            for(int j=0;j<n;j++)//n=10
            {
                if(a[i][j])
                {
                    ans++;
                    dfs(i,j);
                }
            }
        cout<<ans;
        return 0;
    }
  • 相关阅读:
    在servlet中实现页面跳转
    我的jsp学习日记——001:@include(静态包含指令)和jsp:include(动态包含指令)的区别
    myEclipse中修改新建jsp文档的编码格式
    js判断一个图片是否已经存在于缓存中
    MyEclipse的JavaScript提示插件(JSEclipse)
    pku2051 Argus
    pku2084 Game of Connections
    pku2001 Shortest Prefixes
    pku2007 Scrambled Polygon
    pku2153 Rank List
  • 原文地址:https://www.cnblogs.com/cyfe67373/p/12444768.html
Copyright © 2011-2022 走看看