首页 > 编程知识 正文

视频解析下载原理,vip视频解析是什么原理

时间:2023-05-05 05:26:25 阅读:156811 作者:3618

首先我读了很多关于dfs的博客,自己也研究了很多次,最终入门了。 结合简单的个人理解原理和简单的全排列实例进行说明。

简介DFS基于递归思想。 递归思想是指把一件事分成几件同样的小事共同组合完成。 具体请参照下图的jsdxwz的文字解决

这是最典型的递归,入口f(5)出口每次递归的return;

说到递归,就是dfs。 这有两个重要的标志。 也就是说,是两个数组。 一个用于标记该点是否被访问,另一个用于将该点放入数组中。 因此,这两个标志是互补的,一定会同时出现。 dfs是指随机选取起始点并将其标记为已访问点,然后在递归调用中查找与其相邻的点,直到所有点都被访问。

话不多说上例子

输出所有数组,即1-n,其所有数组结果。

代码如下所示。 详细解读代码。

# include stdio.h # includeiostreamusingnamespacestd; int a[101]、b[101]、n; void print () {int i; for(I=1; i=n; I ) {couta[i] '; }coutendl; }inlinevoidDFS(intI ) {int j; if(I==n1 ) {print; 返回; (for ) j=1; j=n; j () if ) b[j]==0) ) {a[i]=j; b[j]=1; DFS(I1 ); b[j]=0; }}}int main () IOs :3360 sync _ with _ stdio (false ); cinn; DFS(1; 返回0; }注:上述代码来自csdn博客Apro1066。

这个代码看起来不多,但确实很经典,有很多东西需要推敲。

首先,主函数的dfs(1)这是dfs函数。 进入自变量1从1开始。 主要是在DFS函数中的理解。 下面的照片展示了这个过程。

下面是一个DFS的经典问题-走迷宫,大家可以结合代码做进一步的理解。

code # include bits/stdc.husingnamespacestd; bool a[101][101]={0}; char b[101][101]; //迷宫int flag=0如果可以出去,则表示为1,反之亦然,0 intxx [4]={0- 1,0,1 },YY [4]={-1,0,1,0 }; int n,kx,ky; //n是迷宫的边长,kx是加减x后的值,同样是ky。 voidDFS(intx,int y ) { for } inti=0; i=3; I ) {kx=x xx[i]; ky=y yy[i]; if (b [ kx ] [ ky ]=='.'|b [ kx ] [ ky ]==' e ' ) kx=0ky=0kxnkyna[ky]==0) a[kx] ) ky )=if (b [ b [ kx ] }else{DFS(kx,ky ); }}}}int main () {int k=1,sum; cinsum; wile(k=sum ) ) memset(a,0,sizeof(a ) a ); //将标记数组a都设为0,表示该点没有通过cinn; for(intI=0; in; I ) for(intj=0; jn; j ) cinb[i][j]; }for(intI=0; in; I ) for(intj=0; jn; j () if ) b[I][j]=='s ' ) DFS(I,j ); }if(flag==1) {cout'YES'endl; }else{cout'NO'endl; (k; }return 0; } 有不懂的地方或者有错误的地方欢迎评论批评指正。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。