深度优先搜索学习---(入门)
Posted printwangzhe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深度优先搜索学习---(入门)相关的知识,希望对你有一定的参考价值。
深度优先搜索的定义
即深度优先是在遍历节点时,以深度为优先,先将一条路遍历完,之后再去遍历别的路。
深度优先的代码框架:
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<iostream>
#include<cstring>
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<<way(0,25,n)<<endl;
return 0;
}
以上是关于深度优先搜索学习---(入门)的主要内容,如果未能解决你的问题,请参考以下文章
⭐算法入门⭐《深度优先搜索》简单02 —— LeetCode 617. 合并二叉树