HDU1241广搜
来源:互联网 发布:opencv读取caffe 编辑:程序博客网 时间:2024/04/30 20:45
题目大意:矩形格子内有油田,相邻的两个格子如果油口,那么它们是同一个油田,求一共有多少的油田。
分析:深搜,广搜都可以,广搜注意标记以避免重复访问。
(Tip:HDU上给的第四个测试数据有问题,第二个5后面多了个空格)
#include<stdio.h>#include<string.h>#define MAX 105char ma[MAX][MAX],mark[MAX][MAX],ans,row,col;int d[8][2]={0,1,1,0,0,-1,-1,0,-1,-1,1,1,-1,1,1,-1};void bfs(int x,int y){ int i,j; mark[x][y]++; for(i=0;i<8;i++){ if((x+d[i][0])>=0&&(y+d[i][1])>=0&&(x+d[i][0])<row&&(y+d[i][1])<col) if(mark[x+d[i][0]][y+d[i][1]]==0&&ma[x+d[i][0]][y+d[i][1]]=='@') mark[x+d[i][0]][y+d[i][1]]=1; } for(i=0;i<8;i++) if((x+d[i][0])>=0&&(y+d[i][1])>=0&&(x+d[i][0])<row&&(y+d[i][1])<col) if(ma[x+d[i][0]][y+d[i][1]]=='@'&&mark[x+d[i][0]][y+d[i][1]]==1) bfs(x+d[i][0],y+d[i][1]);}int main(){// freopen("in.txt","r",stdin); int i,j; while(scanf("%d%d",&row,&col)&&row){ ans=0; for(i=0;i<row;i++){ getchar(); for(j=0;j<col;j++) scanf("%c",&ma[i][j]); } memset(mark,0,sizeof(mark)); for(i=0;i<row;i++) for(j=0;j<col;j++) if(ma[i][j]=='@'&&mark[i][j]==0){ ans++;mark[i][j]=1; bfs(i,j); } printf("%d\n",ans); } return 0;}
0 0
- HDU1241广搜
- HDU1241简易广搜
- hdu1241详解 Java广搜搞定
- hdu1241——Oil Deposits(广搜的简单应用)
- HDU1241
- hdu1241
- hdu1241
- HDU1241
- hdu1241
- hdu1241
- hdu1241
- hdu1241
- hdu1241
- hdu1241
- hdu1241
- hdu1241
- HDU1241
- hdu1241
- Protocol 保护,私有,公有
- 双系统为linux扩容
- 第五天CCTouch详解
- jetty之嵌入式运行jetty
- PHP中静态(static)调用非静态方法详解
- HDU1241广搜
- Linux学习笔记(八)Linux命令行快捷键
- storm源码分析--TimeCacheMap
- 堆和优先级队列
- qmake概念
- 项目6.4 "三色球" 问题
- LINUX下GDB调试
- 偏差与方差(Bias and Variance)
- 保姆照顾孩子版本1