本题和HDU畅通project类似。仅仅只是畅通project给出了数的连通关系,

而此题须要自己推断连通关系,即两个水管能否够连接到一起,也是本题的难点所在。

记录状态。不断combine(),注意仅仅须要推断左方和上方即可,这样不会反复推断,并且肯定都能够遍历到全部的状态。

#include<stdio.h>
#include<iostream>
#include<string>
//记录水管的形状,每种水管用一个由'0'和'1'组成的长度为4的字符串代表,
//分别表示上下左右四边是否有接口,'0'无,'1'有
char a[11][5]={"1010","1001","0110","0101","1100","0011",
"1011","1110","0111","1101","1111"};
int father[51][51];
char map[51][51];
int n,m;
using namespace std;
int find(int x)//查找父节点,并压缩路径
{
if(father[x/n][x%n]!=x)
father[x/n][x%n]=find(father[x/n][x%n]);
return father[x/n][x%n];
} void Union(int x,int y)//合并x,y的集合
{
x=find(x);
y=find(y);
if(x!=y)
father[y/n][y%n]=x;
} void judge(int i,int j)//推断map[i][j]和它的左側和上側是否连通,如连通则合并
{
if(j>0&&a[map[i][j]-'A'][2]=='1'&&a[map[i][j-1]-'A'][3]=='1')//推断上方
Union(i*n+j,i*n+j-1); if(i>0&&a[map[i][j]-'A'][0]=='1'&&a[map[i-1][j]-'A'][1]=='1')//推断左方
Union(i*n+j,(i-1)*n+j);
} int main()
{
int i,j,count;
while(scanf("%d%d",&m,&n)!=-1&&(n!=-1||m!=-1))
{
for(i=0;i<m;i++)
{
scanf("%s",map[i]);//输入矩阵
for(j=0;j<n;j++)
father[i][j]=i*n+j;//将父节点初始化
} for(i=0;i<m;i++)
for(j=0;j<n;j++)
judge(i,j); count=0;//查找父节点是本身的点的个数。即共同拥有几个集合
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if(father[i][j]==i*n+j)
count++;
printf("%d\n",count);
}
return 0;
}

最新文章

  1. javascript编程杂记
  2. iOS开发-UI 从入门到精通(二)
  3. javascript事件之:谈谈自定义事件(转)
  4. Linux:文件权限
  5. TCP服务器连接相关知识点
  6. Android 图文数据JSON解析
  7. JS去掉数组的重复项
  8. 使用Python玩转WMI
  9. 在线读取office 文件(Word excel 等)
  10. Extjs4.x完美treepanel checkbox无限级选中与取消
  11. 在Nginx中搭建Nagios监控平台
  12. [LeetCode] Beautiful Arrangement 优美排列
  13. Linux 高性能服务器编程——多线程编程
  14. Flask请求扩展和数据库连接池
  15. 使用FreeHttp强制登出微信公众号登陆状态(实现~原理)
  16. Linux:Day13(下) GRUB
  17. CJSON create.c
  18. 原生js 函数 callee属性
  19. [转] Webpack 打包优化之体积篇
  20. vim 正则替换功能

热门文章

  1. Eclipse 添加本地 SVN插件以及运行项目的流程
  2. 【JAVA练习】- 一个逻辑题
  3. Go Server Record
  4. Android媒体解码MediaCodec MediaExtractor学习
  5. servlet-后台获取form表单传的参数
  6. 安卓Queue的使用
  7. 我的web前端自学之路-心得篇:我为什么要学习web前端?
  8. AS3.0+PHP写入mySQL
  9. Why use Cache-Control header in request?
  10. phpstorm 使用