dfs初探

dfs初探

 

慕课(视频)pku的dfs例子实现

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int path[11];
int arr[11][11];
bool tag[11];
#define endl '\n'

/*
dfs的四个步骤
1、定义dfs的功能
2、if() 结束条件
3、写一个for(遍历所有子节点)
4、return dfs的结果
*/

bool dfs1(int v,int end,int& depth) //输出其中一条路径,但是这样没有遍历所有的点,所以不算是完整的dfs
{
if(v==end)
{
path[depth]=v;
depth++; //注意先赋值再++
return true;
}

if(tag[v]==false) return false;

tag[v]=false;
path[depth]=v;
depth++;
for(int i=1;i<11;i++)
{
if(arr[v][i]==1 && dfs1(i,end,depth))
return true;
}
depth--;
return false;

}


void dfs2(int v,int end,int depth)
{
if(v==end)  
{
path[depth]=v;
for(int i=0;i<=depth;i++)
printf("%d ",path[i]);
printf("\n");
return;
}

if(tag[v]==false) return;

tag[v]=false;
path[depth]=v;
for(int i=1;i<11;i++)
{
if(arr[v][i]==1)
dfs2(i,end,depth+1);
}
tag[v]=true;
}



int main()
{

memset(arr,0,sizeof(arr)); //在cstring库里,把数组全部初始化为0
arr[1][2]=arr[1][3]=1;
arr[2][1]=arr[2][4]=1;
arr[3][1]=arr[3][4]=arr[3][5]=arr[3][7]=1;
arr[4][2]=arr[4][3]=arr[4][5]=arr[4][8]=1;
arr[5][3]=arr[5][4]=arr[5][6]=1;
arr[6][5]=arr[6][8]=1;
arr[7][3]=arr[7][9]=arr[7][10]=1;
arr[8][4]=arr[8][6]=1;
arr[9][7]=arr[10][7]=1;

//bool tag[11]注意在全局里面定义了,这边再定义一次。初始化是针对这边的数组,但是函数中用的是全局的
//这样就会出现逻辑错误
memset(tag,1,sizeof(tag));
int num=0;
int& depth=num;
int begin=1;
int end=8;

printf("全部路径:\n");
dfs2(begin,end,0);

printf("输出其中一条路径\n");
if(dfs1(begin,end,depth))
  {
  for(int i=0;i<depth;i++)
  printf("%d ",path[i]);
  printf("\n");
}


return 0;
}



 

执行结果如下:

 

 

 

leetcode104

 

树是图的一种,只是他是只有左右节点(即只有两个子节点的图)

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution
{
public:
  //法一,由下向上
  int dfs1(TreeNode* root)
  {
      if(root->left==NULL && root->right==NULL)
          return 1;
      int left_len,right_len;
      if(root->left) left_len=dfs(root->left); //注意左or右节点为空的时候。
      else   left_len=0;
      if(root->right) right_len=dfs(root->right);
      else   right_len=0;
      return (max(left_len,right_len)+1);
  }
   
   
  //法二 由上而下
  void dfs2(TreeNode* root,int depth,int& max_depth)
  {
      if(root->left==NULL && root->right==NULL)
          max_depth=max(depth,max_depth);
     
      if(root->left)
        dfs(root->left,depth+1,max_depth);
       
      if(root->right)
          dfs(root->right,depth+1,max_depth);
     
       
  }
   
   
  int maxDepth(TreeNode* root)
  {
      if(!root)   //注意空树的时候
          return 0;
      int ans=0;
      int& max_depth=ans; //不能用全局函数的话,可以用引用代替
      dfs2(root,1,max_depth); //depth初始化为1
      return max_depth;
  }
};
//一个空树   左右节点不全在的时候

 

转载于:https://www.cnblogs.com/zmmz/p/9823255.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的纺织品企业财务管理系统,源码+数据库+毕业论文+视频演示 在如今社会上,关于信息上面的处理,没有任何一个企业或者个人会忽视,如何让信息急速传递,并且归档储存查询,采用之前的纸张记录模式已经不符合当前使用要求了。所以,对纺织品企业财务信息管理的提升,也为了对纺织品企业财务信息进行更好的维护,纺织品企业财务管理系统的出现就变得水到渠成不可缺少。通过对纺织品企业财务管理系统的开发,不仅仅可以学以致用,让学到的知识变成成果出现,也强化了知识记忆,扩大了知识储备,是提升自我的一种很好的方法。通过具体的开发,对整个软件开发的过程熟练掌握,不论是前期的设计,还是后续的编码测试,都有了很深刻的认知。 纺织品企业财务管理系统通过MySQL数据库与Spring Boot框架进行开发,纺织品企业财务管理系统能够实现对财务人员,员工,收费信息,支出信息,薪资信息,留言信息,报销信息等信息的管理。 通过纺织品企业财务管理系统对相关信息的处理,让信息处理变的更加的系统,更加的规范,这是一个必然的结果。已经处理好的信息,不管是用来查找,还是分析,在效率上都会成倍的提高,让计算机变得更加符合生产需要,变成人们不可缺少的一种信息处理工具,实现了绿色办公,节省社会资源,为环境保护也做了力所能及的贡献。 关键字:纺织品企业财务管理系统,薪资信息,报销信息;SpringBoot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值