AOJ0118 Property Distribution 搜索

来源:互联网 发布:网络直播培训机构 编辑:程序博客网 时间:2024/06/05 02:04

第一次做AOJ的题目,给个纪念先~http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0118

题意:题意:在H * W的矩形果园里有苹果、梨、蜜柑三种果树, 相邻(上下左右)的同种果树属于同一个区域,给出果园的果树分布,求总共有多少个区域。
         (原题的样图中苹果为リ,梨为カ,蜜柑为ミ, 图中共10个区域)
         输入:多组数据,每组数据第一行为两个整数H、W(H <= 100, W <= 100), H =0 且 W = 0代表输入结束。以下H行W列表示果园的果树分布, 苹果是@,梨是#, 蜜柑是*。
         输出:对于每组数据,输出其区域的个数。

题解:搜索。。将搜完的地方用“.”或者其他什么字符表示。

#include<iostream>#include<cstring>#include<cstdlib>#include<cstdio>#include<stack>using namespace std;int n,m;int f[4][2]={0,1,1,0,0,-1,-1,0};char a[101][101];void dfs(int x,int y,char c){    for(int i=0;i<4;i++)    {        int nx=x+f[i][0];        int ny=y+f[i][1];        if(nx<=n&&ny<=m&&nx>0&&ny>0&&a[nx][ny]==c)        {            a[nx][ny]='.';            dfs(nx,ny,c);        }    }}int main(){    while(cin>>n>>m)    {        int ans=0;        if(n == 0&&m == 0)            break;        for(int i=1;i<=n;i++)            for(int j=1;j<=m;j++)            cin>>a[i][j];        for(int i=1;i<=n;i++)            for(int j=1;j<=m;j++)            {                if(a[i][j]!='.')                {                    ans++;                    dfs(i,j,a[i][j]);                }            }        cout<<ans<<endl;    }}



原创粉丝点击