
























深度优先搜索(Depth-First Search,DFS)是图论和树结构遍历中最经典的算法之一。该算法采用纵向扩展策略,沿着一条路径尽可能深入地探索,直到无法继续前进时才回溯到上一个分支点。DFS与广度优先搜索(BFS)形成鲜明对比,后者采用横向扩展的遍历方式。
DFS的核心在于“不撞南墙不回头”的探索方式:
深搜 (Depth-First-Search,dfs)
int n,m,i,j,s=0;
int a[111][111];//bool
//四方向
int xx[9]={0,-1,0,1};
int yy[9]={-1,0,1,0};
//八方向
//int xx[11]={-1,-1,-1,0,0,1,1,1};
//int yy[11]={-1,0,1,-1,1,-1,0,1};
void w(int x,int y){
if(x==fx&&y==fy){//终止条件
s++;
return;
}
for(int i=0;i<4;i++){
int nx=x+xx[i],ny=y+yy[i];
if(a[nx][ny]==0&&nx<=n&&ny<=n&&nx>0&&ny>0){
a[nx][ny]=2;//1
w(nx,ny);
a[nx][ny]=0;//回溯
}
}
}
洪水填充(大洪水)(Flood fill)
int n,m,i,j,s=0;
int a[111][111];//bool
//四方向
int xx[9]={0,-1,0,1};
int yy[9]={-1,0,1,0};
//八方向
//int xx[11]={-1,-1,-1,0,0,1,1,1};
//int yy[11]={-1,0,1,-1,1,-1,0,1};
void w(int x,int y){
s++;
//无终止条件
for(int i=0;i<4;i++){
int nx=x+xx[i],ny=y+yy[i];
if(a[nx][ny]==0&&nx<=n&&ny<=n&&nx>0&&ny>0){
a[nx][ny]=2;//1
w(nx,ny);
//不回溯
}
}
}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。