深度优先搜索学习---(入门)
深度优先搜索的定义
即深度优先是在遍历节点时,以深度为优先,先将一条路遍历完,之后再去遍历别的路。
深度优先的代码框架:
1 /*深度优先*/
2
3 bool Dfs(V){
4 if(V为终点)
5 return true;
6 if(v为旧点)
7 return false;
8 将v标记为旧点
9 对和v相邻的每个节点U
10 {
11 if(Dfs(U)==true)
12
13 return true;
14 }
15 return false
16 }
深度优先搜索例题:
解法+思路
/* 踩方格 思路: 1.分析题目明确目的 2.抽象题目,找出子问题,从最简单的做起 例:分三种走法就是 way(i,j-1,n-1),way(i,j+1,n-1) ,way(i+1,j,n-1) 将他们加起来就是总种数 注:一步步来,不要想着一步到位 3.代码实现 该题目的知识点: 1.用染色法标记走过的格子,最后将 color[i][j]=0;重置防止干扰其他的走法 2.memset()函数初始化数组 */ #include#include ,25,n)<<endl; return 0; }using namespace std; int color[50][50]; int way(int i,int j,int n) { if(n==0) return 1; color[i][j]=1;//表示已经走过 int number=0; if(!color[i][j-1])//左走 number+=way(i,j-1,n-1); if(!color[i][j+1])//右走 number+=way(i,j+1,n-1); if(!color[i+1][j])//下走 number+=way(i+1,j,n-1); color[i][j]=0;//初始化,防止影响递归的操作 return number; } int main(){ int n; //步数 int i,j; cout<<"请输入步数"<<endl; cin>>n; memset(color,0,sizeof(color)); cout< 0