aoj-0118 property distribution(搜索)

Time limit1000 ms

Memory limit131072 kB

タナカ氏が HW アールの果樹園を残して亡くなりました。果樹園は東西南北方向に H × Wの区画に分けられ、区画ごとにリンゴ、カキ、ミカンが植えられています。タナカ氏はこんな遺言を残していました。

果樹園は区画単位でできるだけ多くの血縁者に分けること。ただし、ある区画の東西南北どれかの方向にとなりあう区画に同じ種類の果物が植えられていた場合は、区画の境界が分からないのでそれらは 1 つの大きな区画として扱うこと。

例えば次のような 3 × 10 の区画であれば (‘リ‘はリンゴ、‘カ‘はカキ、‘ミ‘はミカンを表す)

同じ樹がある区画の間の境界を消すと次のようになり、

結局 10 個の区画、つまり 10 人で分けられることになります。

雪が降って区画の境界が見えなくなる前に分配を終えなくてはなりません。あなたの仕事は果樹園の地図をもとに分配する区画の数を決めることです。

果樹園の地図を読み込み、分配を受けられる血縁者の人数を出力するプログラムを作成してください。

Input

複数のデータセットが与えられます。各データセットは空白で区切られた HW (H, W ≤ 100) を含む行から始まり、続いて H × W の文字からなる H 行の文字列が与えられます。この文字列には、リンゴを表す ‘@‘、カキを表す ‘#‘、ミカンを表す ‘*‘、の 3 文字しか現れません。

入力はゼロが2つの行で終わります。データセットの数は 20 を超えません。

Output

各データセットごとに、分配を受ける人数を1行に出力してください。

Sample Input

10 10
####*****@
@#@@@@#*#*
@##***@@@*
#****#*@**
##@*#@@*##
*@@@@*@@@#
***#@*@##*
*@@@*@@##@
*@*#*@##**
@****#@@#@
0 0

Output for the Sample Input

33题意 一个大方格被分成几个区域,和水洼差不多
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>

using namespace std;
#define PI 3.14159265358979323846264338327950
#define INF 0x3f3f3f3f3f3f3f3f;

char a[110][110],ch;
int n,m;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int ans;

void dfs(int x,int y)
{
    if(x<1 || y<1 || x>n || y>m)
        return ;
    if(a[x][y]!=ch)
        return ;
    a[x][y]=‘.‘;
    for(int i=0;i<4;i++)
        dfs(x+dx[i],y+dy[i]);
}

int main()
{
    while(scanf("%d %d",&n,&m) && (n||m))
    {
        int i,j;
        for( i=1;i<=n;i++)
            for( j=1;j<=m;j++)
                cin>>a[i][j];
        ans=0;
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
            {
                if(a[i][j]==‘.‘)
                    continue;
                ch=a[i][j];
                dfs(i,j);
                ans++;
            }
        printf("%d\n",ans);
    }

}

原文地址:https://www.cnblogs.com/smallhester/p/9499294.html

时间: 2024-10-10 12:51:30

aoj-0118 property distribution(搜索)的相关文章

AOJ 0118: Property Distribution (简单DFS)

题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0118 题意:给定一个矩阵,同类字符相连的为一个块,问总共有几个块. 输入:h,w(行和列)0 <= h <= 100,0 <= w <= 100 矩阵 输入包含多组用例,以0,0结束. 输出:块数. 代码: #include <iostream> using namespace std; typedef long long ll; #defin

AOJ 0118 Property Distribution【DFS】

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

aoj 0118 Property Distribution

タナカ氏が HW アールの果樹園を残して亡くなりました.果樹園は東西南北方向に H × W の区画に分けられ.区画ごとにリンゴ.カキ.ミカンが植えられています.タナカ氏はこんな遺言を残していました. 果樹園は区画単位でできるだけ多くの血縁者に分けること.ただし.ある区画の東西南北どれかの方向にとなりあう区画に同じ種類の果物が植えられていた場合は.区画の境界が分からないのでそれらは 1 つの大きな区画として扱うこと. 例えば次のような 3 × 10 の区画であれば ('リ'はリンゴ.'カ'はカキ.

POJ 1979 POJ 3009 AOJ 0033 AOJ 0118 [搜索类题目][0033贪心模拟]

/** POJ 1979 BFS */ #include <stdio.h> #include <string.h> #include <iostream> #include <queue> using namespace std; const int N = 20 + 5; int mp[N][N]; int sx,sy; int n, m; int vis[3000]; int dirx[] = {0, 1, 0, -1}; int diry[] = {

nomasp 博客导读:Android、UWP、Algorithm、Lisp(找工作中……

Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸.本博客会持续更新.感谢您的支持.欢迎您的关注与留言.博客有多个专栏,各自是关于 Android应用开发 .Windows App开发 . UWP(通用Windows平台)开发 . SICP习题解 和 Scheme语言学习 . 算法解析 与 LeetCode等题解 .而近期会加入的文章将主要是算法和Android.只是其他内容也会继续完好. About the Author 独立 Windows App 和

挑战程序设计竞赛 2.1 最基础的“穷竭搜索”

[Summarize] 1.划分为两堆的无序模型可以利用二进制枚举, 而划分为两堆的有序模型可以枚举全排列取定长 2.当搜索终态唯一时可考虑逆向搜索 POJ 1979:Red and Black /* 一个矩形的屋子里有一个人,他可以踩黑格子,但是不能踩红格子, 他现在站在一个黑格子上,告诉你房间的布局, 这个人可以向上下左右四个方向移动,问这个人最多能到达的格子数 */ #include <cstdio> #include <cstring> using namespace st

深度优先搜索DFS (poj2386,poj1979, poj3009,poj1321,aoj0033,aoj0118)

深度优先搜索(DFS) 往往利用递归函数实现(隐式地使用栈). 深度优先从最开始的状态出发,遍历所有可以到达的状态.由此可以对所有的状态进行操作,或列举出所有的状态. 1.poj2386 Lake Couting 题意:八连通被认为连接在一起,求总共有多少个水洼? Sample Input: 10 12 W........WW. .WWW.....WWW ....WW...WW. .........WW. .........W.. ..W......W.. .W.W.....WW. W.W.W.

十三 十四周总结

1 //十三周总结 2 //在看挑战程序设计的第二章和第三章的第一节 3 //二分 4 //1.从一个 有序的数组里面查找某一个值 5 int pos=lower_bound(a,a+n,key)-a;//返回的pos是大于等于键值的第一个位置 6 int pos=upper_bound(a,a+n,key)-a;//返回的pos是严格大于键值的第一 个位置 7 //2.判断一个解是否可行 8 //1)一般应该是先确定上界,下界,一个判断解是否可行的ok函数来找 9 //2) 看书上写的,输出小

ExtJs之Ext.data.Store

ExtJs之Ext.data.Store Posted on 2009-07-21 09:09 linFen 阅读(44912) 评论(5) 编辑 收藏 Store.getCount()返回的是store中的所有数据记录,然后使用for循环遍历整个store,从而得到每条记录. 除了使用getCount()的方法外,还可以使用each()函数,如下面的代码所示. store.each(function(record) { alert(record.get('name')); }); Each()