hdu 1241 Oil Deposits 解题报告
2011-08-24 09:28
323 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1241
第一次写搜索代码 花了好大的功夫检查 看了别人的结题报告 还是错误一大堆 哎
题目是这样的 @表示油田 *表示非油田 @与其八个方向@组成一片连续油田 一个@*组成的图 文有几片油田
思路:没被标记找大一个@ 在使用dfs 把所有的相连的油田都标记为已查找
然后油田片数+1;
知道找完所有的点;
用递归的方式实现深搜
第一次写搜索代码 花了好大的功夫检查 看了别人的结题报告 还是错误一大堆 哎
题目是这样的 @表示油田 *表示非油田 @与其八个方向@组成一片连续油田 一个@*组成的图 文有几片油田
思路:没被标记找大一个@ 在使用dfs 把所有的相连的油田都标记为已查找
然后油田片数+1;
知道找完所有的点;
用递归的方式实现深搜
#include<iostream> #include<string> #include<queue> usingnamespace std; int ans=0; bool visit[100][100]={0};//用一个 bool数组表示是否被找过 char map[100][100];//存储图形 int n,m; int f[8][2]={1,0,-1,0,0,1,0,-1,1,1,1,-1,-1,-1,-1,1};//没两位表示一个方向 8个方向 void dfs(int x,int y) { int i,j,k,dx,dy; visit[x][y]=1; for(i=0;i<8;i++) { dx=x+f[i][0]; dy=y+f[i][1]; if(dx<0|| dy<0|| dx>=m || dy>=n || map[dx][dy]=='*'|| visit[dx][dy]==1)//改了很多次才改对 这就是菜鸟
//打得时候忘了visit[dx][dy]==1 continue; if(map[dx][dy]=='@'&& visit[dx][dy]==0) {visit[dx][dy]=1; dfs(dx,dy);//使用了递归的方式 容易理解 } } return ; } int main() { int i,j; while(scanf("%d %d",&m,&n)!=EOF) { getchar();//下面要输入字符 所以要用getchar 接受回车 ans=0; memset(map,0,sizeof(map)); memset(visit,0,sizeof(visit)); if(n==0&& m==0) { break; } for(i=0;i<m;i++) { for(j=0;j<n;j++) { scanf( "%c",&map[i][j] ); } getchar(); } for(i=0;i<m;i++) { for(j=0;j<n;j++) { if(visit[i][j]==0&& map[i][j]=='@') { dfs(i,j); ans++; } } } printf("%d\n",ans); } //system("pause"); return0; }
相关文章推荐
- hdu 1241 Oil Deposits 解题报告
- hdu 1241 Oil Deposits 解题报告
- 杭电 1241 Oil Deposits 解题报告
- hdu 1241 Oil Deposits(DFS)
- 【HDU】 1241 Oil Deposits
- HDU 1241 Oil Deposits
- HDU-1241 Oil Deposits
- 【HDU 1241 Oil Deposits】 + DFS || BFS
- HDU 1241 Oil Deposits
- HDU1241 Oil Deposits 【DFS】
- hdu 1241 Oil Deposits (dfs)
- Hdu_1241 Oil Deposits
- HDU 1241--Oil Deposits【DFS】
- hdu 1241 Oil Deposits
- HDU 1241 Oil Deposits
- Hdu 1241 Oil Deposits
- hdu_1241_Oil Deposits(DFS)
- HDU-#1241 Oil Deposits(BFS & DFS)
- HDU 1241 Oil Deposits(dfs)
- HDU——1241 Oil deposits(dfs)