就是找相连的油井有多少块。深搜就行了,只是注意方向是8个而不是4个。
简单题,直接看代码:
#include<stdio.h> #include<stdlib.h> int d[8][2]={{-1,-1},{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1}};//从左上开始,顺时针 char oil[101][101]; int len,wid; void dfs(int x,int y); int main() { int i,j,cnt; while(scanf("%d%d",&wid,&len)) { getchar(); if( !len && !wid) break ; for(i = 0 ; i < wid ; ++i) { scanf("%s",oil[i]); getchar(); } cnt = 0 ; for(i = 0 ; i < wid ; ++i) { for(j = 0 ; j < len ; ++j) if(oil[i][j] == '@') { dfs(i,j); ++cnt; } } printf("%d\n",cnt); } return 0; } void dfs(int x,int y) { int i,a,b; oil[x][y] = '*'; for(i = 0 ; i < 8 ; ++i) { a = x + d[i][0]; b = y + d[i][1]; if(a < 0 || a >= wid || b < 0 || b >= len) continue ; if(oil[a][b] == '@') { dfs(a,b); } } return ; }
汗!当初我把dfs()里越界检查那个wid,len弄反了。害得我调试了好久!以后不能再粗心大意了啊!