Hdu 1241 - Oil Deposits
2012-11-24 00:27
405 查看
深搜
惭愧啊,这题之前的代码连测试数据都过不了我居然也写上来了,要不是复习搜索,我也不会发现这个bug。
我的博客都是凭良心写的,每一篇代码都能AC!要是你CE了,换一种语言试试看!
搜索的时候把搜过的点置换成其他符号,避免重复搜索。
由于有上下左右和对角线上相邻的点,所以要搜索八个方向。
AC代码:
惭愧啊,这题之前的代码连测试数据都过不了我居然也写上来了,要不是复习搜索,我也不会发现这个bug。
我的博客都是凭良心写的,每一篇代码都能AC!要是你CE了,换一种语言试试看!
搜索的时候把搜过的点置换成其他符号,避免重复搜索。
由于有上下左右和对角线上相邻的点,所以要搜索八个方向。
AC代码:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> char map[105][105]; int n, m; int dir[8][2] = { {-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1} } ; bool inmap(int x,int y) { if(x<0 || y<0 || x>=m || y>=n) return false; return true; } void dfs(int x, int y) { int xx, yy, i; for(i=0; i<8; i++) { xx = x + dir[i][0]; yy = y + dir[i][1]; if(inmap(xx, yy) && map[xx][yy] == '@') { map[xx][yy] = '*'; dfs(xx, yy); } } } int main() { int i, j, cnt; while(scanf("%d%d",&m,&n)!=EOF) { if(!m) break; getchar(); for(i=0; i<m; i++) scanf("%s",map[i]); cnt = 0; for(i=0; i<m; i++) { for(j=0; j<n; j++) { if(map[i][j] == '@') { dfs(i, j); cnt++; } } } printf("%d\n",cnt); } return 0; }
相关文章推荐
- HDU 1241 Oil Deposits[dfs || bfs]
- HDU 1241 Oil Deposits【DFS】
- HDU - 1241 Oil Deposits
- hdu 1241 Oil Deposits - bfs
- HDU 1241 Oil Deposits
- hdu 1241 Oil Deposits
- hdu 1241 Oil Deposits 简单八个方向的DFS
- hdu 1241 Oil Deposits (连通块的个数)
- hdu 1241 Oil Deposits
- hdu 1241 Oil Deposits 深搜 Ac
- HDU 1241 Oil Deposits (DFS)
- hdu 1241 Oil Deposits
- HDU 1241 Oil Deposits【dfs&bfs】
- hdu 1241 Oil Deposits【广度优先搜索】
- HDU 1241 Oil Deposits (DFS)
- HDU1241 Oil Deposits [DFS]
- hdu 1241 Oil Deposits - bfs
- HDU-1241-Oil Deposits
- HDU--1241:Oil Deposits (DFS)
- hdu 1241 Oil Deposits