题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198

dfs:

 #include<cstdio>//hdu1198 dfs
#include<cstring> int well[][] = { {,,,,},{,,,,},{,,,,},{,,,,},{,,,,},{,,,,},{,,,,},{,,,,},{,,,,},{,,,,},{,,,,}}; const int ca[][] = {,,,,,,,,,}, mov[][] = {,,-,,,,,-};
int m,n,sum, map[][],id[][]; void build(int set, int x, int y)
{
for(int k = ; k<; k++)
{
if(well[set][k])
{
map[*x+ca[k][]][*y+ca[k][]] = ;
}
}
} void dfs(int x, int y, int iden)
{
id[x][y] = iden;
for(int i = ; i<; i++)
{
int xx = x + mov[i][], yy = y + mov[i][];
if(xx< || xx>*m- || yy< || yy>*n- ) continue;
if(map[xx][yy] && !id[xx][yy])
dfs(xx,yy,iden);
}
} int main()
{
char init[];
while(scanf("%d%d",&m,&n) && (m!=- || n!=- ))
{
memset(map,,sizeof(map));
memset(id,,sizeof(id));
for(int i = ; i<m; i++)
{
scanf("%s",init);
for(int j = ; j<n; j++)
build(init[j]-,i,j);
}
sum = ;
for(int i = ; i<=*m-; i++)
{ for(int j = ; j<=*n-; j++)
{
//printf("%d ",map[i][j]);
if(map[i][j] && !id[i][j])
{
dfs(i,j,++sum);
}
}
//putchar('\n');
} printf("%d\n",sum); }
return ;
}

并查集:

 #include<cstdio>//hdu1198 并查集 每个格子的标号为i*n+j,初始father也为i*n+j,以次来作为合并集合的依据
#include<cstring> int n,m,father[][];
char map[][];
char type[][]={"","","","","","",
"","","","",""}; int find(int x)
{
return (x==father[x/n][x%n])?x:find(father[x/n][x%n]);
} int unit(int a, int b)
{
a = find(a);
b = find(b);
if(a!=b)//合并集合
father[a/n][a%n] = b;
} int judge(int i, int j)
{ //判断是否与左边相连
if(j> && type[map[i][j]-'A'][]=='' && type[map[i][j-]-'A'][]=='')
unit(i*n+j,i*n+j-);
//判断是否与上边相连
if(i> && type[map[i][j]-'A'][]=='' && type[map[i-][j]-'A'][]=='')
unit(i*n+j,(i-)*n+j);
} int main()
{
while(scanf("%d%d",&m,&n) && (m!=- || n!=-))
{
for(int i = ; i<m; i++)
{
scanf("%s",&map[i]);
for(int j = ; j<n; j++)
{ //初始化为自己
father[i][j] = i*n+j;
}
} //并查集过程
for(int i = ; i<m; i++)
for(int j = ; j<n; j++)
judge(i,j); int sum = ;
for(int i = ; i<m; i++)
for(int j = ; j<n; j++)//看看有多少个“根节点”
if(father[i][j]==i*n+j) sum++; printf("%d\n",sum);
} }

hdu1198 Farm Irrigation —— dfs or 并查集的更多相关文章

  1. hdu1198 Farm Irrigation 并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1198 简单并查集 分别合并竖直方向和水平方向即可 代码: #include<iostream&g ...

  2. hdu.1198.Farm Irrigation(dfs +放大建图)

    Farm Irrigation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. acdream 1685 多民族王国(DFS,并查集)

    Problem Description 娜娜好不容易才回忆起自己是娜娜而不是什么Alice,也回忆起了自己要继续探索这个世界的目标,便偷偷溜出皇宫.娜娜发现这个王国有很多个民族组成,每个民族都有自己的 ...

  4. HDU 5438 Ponds (DFS,并查集)

    题意:给定一个图,然后让你把边数为1的结点删除,然后求连通块结点数为奇的权值和. 析:这个题要注意,如果删除一些结点后,又形成了新的边数为1的结点,也应该要删除,这是坑,其他的,先用并查集判一下环,然 ...

  5. 判图的连通性(dfs,并查集)

    一.无向图 欧拉回路:每个顶点度数都是偶数 欧拉路:所有点度数为偶数,或者只有2个点度数为奇数 当然判连通性 hdu 1878 欧拉回路 两种判连通的方法 dfs #include <iostr ...

  6. ZOJ 2412 Farm Irrigation(DFS 条件通讯块)

    意甲冠军  两个农田管内可直接连接到壳体  他们将能够共享一个水源   有11种农田  管道的位置高于一定  一个农田矩阵  问至少须要多少水源 DFS的连通块问题  两个相邻农田的管道能够直接连接的 ...

  7. 蓝桥杯历届试题 危险系数(dfs或者并查集求无向图关于两点的割点个数)

    Description 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定义一个 ...

  8. Codeforces Round #375 (Div. 2) D. Lakes in Berland (DFS或并查集)

    D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. ACM学习历程—Hihocoder 1291 Building in Sandbox(dfs && 离线 && 并查集)

    http://hihocoder.com/problemset/problem/1291 前几天比较忙,这次来补一下微软笔试的最后一题,这题是这次微软笔试的第四题,过的人比较少,我当时在调试B题,没时 ...

随机推荐

  1. 仓鼠找sugar(lca)

    洛谷——P3398 仓鼠找sugar 题目描述 小仓鼠的和他的基(mei)友(zi)sugar住在地下洞穴中,每个节点的编号为1~n.地下洞穴是一个树形结构.这一天小仓鼠打算从从他的卧室(a)到餐厅( ...

  2. AC自动机(加强版)

    题目描述 有NN个由小写字母组成的模式串以及一个文本串TT.每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串TT中出现的次数最多. 输入输出格式 输入格式: 输入含多组数据. 每组数据 ...

  3. 某考试 T1 Hello my friend

    Discription

  4. Java面向对象--static关键字

  5. C# 将 WebService 封装成动态库

    C# 将 WebService 封装成动态库 服务与服务之间的远程调用,经常会通过Web Service来实现,Web Service是支持跨语言调用的,可以是java调用c++或c#调用java等, ...

  6. es6系列-变量的解构赋值

    git地址: https://github.com/rainnaZR/es6-study/tree/master/src/destructuring 变量的解构赋值 变量的解构赋值: 数组, 对象, ...

  7. 开始我的GL离屏渲染绑定[转]

    地址: http://wiki.woodpecker.org.cn/moin/lilin/swig-glBmpContext 呵呵,有了第一次的经验,我们就要开始我们的GL离屏渲染的绑定了. 关 于O ...

  8. C语言-多重背包问题

    多重背包问题 问题:有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 分 ...

  9. [转]FTP服务器搭建

    下面先说第一中方法: 1.在win7上先开启ftp服务:这里点击确定后,可能会要等一会儿,完成后有时系统会提示重启 2.打开   计算机-->管理-->   在这里我们可以看见刚刚添加的服 ...

  10. 实习日记 laravel怎么删除磁盘上的文件

    Storage 里面有 delete的方法 具体使用是 Storage::disk('uploads')->delete($fileName); 其中'uploads'是filesystem里面 ...