总结:
本体考虑用DFS解决问题时,发现了两个之前并没在意的错因,第一个便是在编写搜索函数时,对于搜索的条件并没有设置,导致没有编译通过,程序报错,以本题为例,递归终止条件自然不用多说,即是否越界,而搜索之前,须先判断当前位置是否为细胞数字,是的话,才去搜索,否则不搜;前几次编译的时候,就因为没有设置该条件,导致程序无法运行,直接终止了。第二个便是一直忽略的错误,比如去枚举搜索四个方向时,注意观察一下两个程序的区别,此处细节直接决定成败!
方向1:(程序错误展示)
int dx[4]={-1,1,0,0};
int dy[4]={0,0,-1,1};
void DFS(int x,int y)
{
if(x<1||x>n||y<1||y>m) return ;
a[x][y]=0;
for(int i=0;i<4;i++)
{
x=x+dx[i],y=y+dy[i];
if(a[x][y]!=0) DFS(x,y); //符合条件的去搜,否则不搜;
}
}
运行程序发现,编译不通过!!!!错误,以下正解;
方向2:(程序正确展示)
void DFS(int x,int y)
{
if(x<1||x>n||y<!||y>m) return ;
a[x][y]=0;
for(int i=0;i<4;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(a[xx][yy]) DFS(xx,yy);
}
}