hdu 1241 Oil Deposits(水一发,自我的DFS)
2016-08-24 21:59
417 查看
解题思路:
1. 遍历扫描二维数组,遇到‘@’,结果ans++;
2. 将当前 i,j 位置置为‘*’,将当前‘@’的 i,j 传人到DFS函数中,开始遍历八个方向的字符
如果碰到 '@' 则先将当前置为‘*’,然后再次递归传递,直到超出界限或者扫描不到‘@’,结束递归
3. DFS()的作用是将i,j为开始周围连续的“@”全部改为‘*’
4. 最后输出 ans 即可;
Ac code :
#include<bits/stdc++.h> using namespace std; char xstr[104][104]; static int ans; int x,y; void dfs(int i,int j) { if(j+1<y&&xstr[i][j+1]=='@') { xstr[i][j+1]='*'; dfs(i,j+1); } if(i+1<x&&j-1>=0&&xstr[i+1][j-1]=='@') { xstr[i+1][j-1]='*'; dfs(i+1,j-1); } if(i+1<x&&xstr[i+1][j]=='@') { xstr[i+1][j]='*'; dfs(i+1,j); } if(i+1<x&&j+1<y&&xstr[i+1][j+1]=='@') { xstr[i+1][j+1]='*'; dfs(i+1,j+1); } if(i-1>=0&&j+1<y&&xstr[i-1][j+1]=='@') { xstr[i-1][j+1]='*'; dfs(i-1,j+1); } if(j-1>=0&&xstr[i][j-1]=='@') { xstr[i][j-1]='*'; dfs(i,j-1); } if(i-1>=0&&xstr[i-1][j]=='@') { xstr[i-1][j]='*'; dfs(i-1,j); } if(i-1>=0&&j-1>=0&&xstr[i-1][j-1]=='@') { xstr[i-1][j-1]='*'; dfs(i-1,j-1); } } int main() { while(scanf("%d%d",&x,&y)!=EOF&&x+y) { ans=0; memset(xstr,0,sizeof(xstr)); int i,j; for(i=0; i<x; i++) { scanf("%s",&xstr[i]); } for(i=0; i<x; i++) { for(j=0; j<y; j++) { if(xstr[i][j]=='@') { xstr[i][j]='*'; ans++; dfs(i,j); } } } printf("%d\n",ans); } return 0; }
相关文章推荐
- hdu-1241-Oil Deposits(dfs水)
- hdu 1241 Oil Deposits(经典dfs)
- hdu 1241 Oil Deposits(dfs入门)
- HDU 1241 Oil Deposits (DFS 八方向)
- [ACM] hdu 1241 Oil Deposits(DFS)
- hdu 1241 Oil Deposits----DFS
- K - Oil Deposits HDU - 1241——DFS
- [ACM] hdu 1241 Oil Deposits(DFS)
- HDU1241_Oil Deposits(BFS)+(DFS)
- [ACM] hdu 1241 Oil Deposits(DFS)
- HDU 1241 Oil Deposits(八连块问题) 与 黑白图像(刘汝佳的小白6.4.1)同样的原理(DFS)
- HDU 1241 Oil Deposits(dfs入门级别模板题)
- hdu 1241 Oil Deposits(DFS)
- hdu 1241 Oil Deposits(dfs)
- HDU 1241 Oil Deposits(DFS)
- HDU 1241 Oil Deposits DFS(深度优先搜索) 和 BFS(广度优先搜索)
- HDOJ(HDU).1241 Oil Deposits(DFS)
- HDU 1241 Oil Deposits(DFS)
- HDU 1241 Oil Deposits --- 入门DFS
- 【HDU】-1241-Oil Deposits(DFS || BFS&&队列)