AOJ0118 Property Distribution(DFS)
来源:互联网 发布:罗马全面战争火攻算法 编辑:程序博客网 时间:2024/06/02 20:06
题意:
在H * W的矩形果园里有苹果、梨、蜜柑三种果树, 相邻(上下左右)的同种果树属于同一个区域,给出果园的果树分布,求总共有多少个区域。
输入:
多组数据,每组数据第一行为两个整数H,W(H <= 100, W <= 100), H =0 且 W = 0代表输入结束。以下H行W列表示果园的果树分布, 苹果是@,梨是#, 蜜柑是*。
输出:
对于每组数据,输出其区域的个数。
分析:
从任意的‘@’或‘#’或‘*’开始,记录开始时的水果种类,不停地把邻接的部分用‘%’代替(代表已经访问过)。一次DFS后与初始的这个水果相邻接的所有相同的水果都被替换成‘%’。
代码:
#include<iostream>using namespace std;const int max_=100;//四个方向移动的向量 int x1[4]={-1,0,1,0}, y1[4]={0,1,0,-1};int H,W;char p[max_][max_];//果园 //c代表水果种类 void dfs(int x, int y, char c){//将现在所在位置替换为'%';p[x][y]='%';//循环遍历移动的4个方向 for(int i=0; i<4; i++){//向x方向移动x1[i],向y方向移动y1[i]; int nx=x+x1[i], ny=y+y1[i];//判断(nx,ny)是否在园子内,以及此处的水果种类是否与开始的水果种类相同 if(nx>=0 && nx<H && ny>=0 && ny<W && p[nx][ny]==c){dfs(nx,ny,c);}}}void solve(){int res=0;for(int i=0; i<H; i++){for(int j=0; j<W; j++){//如果此位置并未被访问 if(p[i][j]!='%'){dfs(i,j, p[i][j]);res++;}}}cout << res << endl;}int main(){while(scanf("%d%d",&H,&W) && H && W){for(int i=0; i<H; i++){scanf("%s",p[i]);}solve();}return 0;}
阅读全文
0 0
- AOJ0118 Property Distribution【DFS】
- AOJ0118 Property Distribution(DFS)
- AOJ0118 Property Distribution 裸dfs
- aoj0118 Property Distribution(dfs)
- aoj0118 Property Distribution 暴力dfs
- AOJ0118——Property Distribution(DFS)
- AOJ0118 Property Distribution 搜索
- aoj0118-Property Distribution
- 【暑假复习】【搜索】AOJ0118:Property Distribution
- AOj0118 dfs
- AOJ 0118 Property Distribution (DFS)
- [DFS] AOJ 0118 Property Distribution
- Aoj 0118 Property Distribution【dfs】
- AOJ 0118 Property Distribution 【DFS】
- AOJ 0118 Property Distribution (dfs)
- AOJ 0118: Property Distribution (简单DFS)
- AOJ0118(DFS)
- AOJ 0033 ball+AOH 0118Property Distribution (DFS)
- 工厂模式
- jmeter请求结果乱码问题
- python3 入门指南
- Android中推荐用SparseArray替换HashMap<Integer,Object>
- iOS学习笔记-119.多线程18——NSOperationQueue自定义NSOperation执行一个操作的取消
- AOJ0118 Property Distribution(DFS)
- python简单游戏设计
- Window 下安装redis
- 数据库SQL优化
- ueditor基本配置使用
- Scrapy爬取1
- Centos 6.5搭建Hadoop-2.7.3分布式集群的那些坑
- 系统架构之数据库水平切分实现方案详解-精华
- 红黑树