POJ1562(DFS)

        就是找相连的油井有多少块。深搜就行了,只是注意方向是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弄反了。害得我调试了好久!以后不能再粗心大意了啊!

       

原文地址:https://www.cnblogs.com/HpuAcmer/p/2248242.html