aoj0118

Posted acm-jing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了aoj0118相关的知识,希望对你有一定的参考价值。

一、题意:有三种水果分别用,‘@‘,‘*‘,‘#‘三种符号表示,上下左右相连的同种水果被看做是一个区域,问一共有多少个区域

 

二、思路:用dfs去标记相连区域,然后遍历每个没有被标记的位置进行dfs

 

三、代码:

#include"iostream"
#include"stdio.h"
#include"vector"
using namespace std;

const int MAXN=105;

char farm[MAXN][MAXN];
int m,n,cnt;

bool IsEdge(int x,int y)
{
    if(x>=0&&x<m&&y>=0&&y<n)
        return true;
    return false;
}

bool IsSame(int x,int y,char tree)
{
    if(farm[x][y]==tree)
        return true;
    return false;
}

void Dfs(int x,int y,char tree)
{
    int dir[]={0,1,0,-1,-1,0,1,0};
    for(int i=0;i<8;i+=2)
    {
        int dx=x+dir[i];
        int dy=y+dir[i+1];
        if(IsEdge(dx,dy)&&IsSame(dx,dy,tree))
        {
            farm[dx][dy]=‘-‘;
            Dfs(dx,dy,tree);
        }
    }
}

int main()
{
    while(cin>>m>>n,m&&n)
    {
        for(int i=0;i<m;i++)
        {
            cin>>farm[i];
        }
        cnt=0;
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(farm[i][j]!=‘-‘)
                {
                    cnt++;
                    char tree=farm[i][j];
                    farm[i][j]=‘-‘;
                    Dfs(i,j,tree);
                }
            }
        }
        cout<<cnt<<endl;
    }
    return 0;
}

  

以上是关于aoj0118的主要内容,如果未能解决你的问题,请参考以下文章

AOJ 0118: Property Distribution (简单DFS)

AOJ 0118 Property DistributionDFS

aoj-0118 property distribution(搜索)

aoj 0118 Property Distribution

AOJ 0118 Property Distribution

Android:通过片段进行相机预览。从活动中确定