zoukankan      html  css  js  c++  java
  • AISing Programming Contest 2019C(DFS,BFS)

    #include<bits/stdc++.h>
    using namespace std;
    int n,m;
    long long a=0,b=0,ans=0;
    char s[407][407];
    int vis[407][407];
    const int dir[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
    void dfs(int x,int y){
        vis[x][y]=1;
        if(s[x][y]=='#')
            b++;
        else if(s[x][y]=='.')
            a++;
        for(int i=0;i<4;i++)
            if(x+dir[i][0]>0&&x+dir[i][0]<=n&&y+dir[i][1]<=m&&y+dir[i][1]>0&&!vis[x+dir[i][0]][y+dir[i][1]]&&s[x+dir[i][0]][y+dir[i][1]]!=s[x][y])
            //不同的点就继续dfs
                dfs(x+dir[i][0],y+dir[i][1]);
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
            scanf("%s",s[i]+1);
        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                if(!vis[i][j])
                    a=b=0,dfs(i,j),ans+=a*b;//.和#的数目相乘即为这一条块的答案,原因相当于枚举起点终点情况为乘积和
        printf("%lld",ans);
        return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    JavaScript进阶-BOM和DOM
    JavaScript基础
    CSS2-属性
    CSS1-选择器
    HTML-常用标签
    判断回文
    课堂作业
    动手动脑
    原码反码补码
    Java第一次考试作业
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10457041.html
Copyright © 2011-2022 走看看