首页 > 编程语言 >php 全排列使用DFS

php 全排列使用DFS

时间:2022-10-31 23:02:13浏览次数:54  
标签:排列 递归 DFS depth used len str path php

字符串的全排列

  • 给定 1,2,3
  • 输出:
    1,2,3
    1,3,2
    2,1,3
    2,3,1
    3,1,2
    3,2,1

其实是一个树形结构

             【】

 1             2            3

2 3 1 3 1 2
123 132 213 231 312 321

使用深度优先搜索 DFS

  • 深度 depth
  • 走过路径 path
  • 已经走过 used
  • 每次走完一条路径则 记录下来
  • 每次回溯 撤下上次的操作

可以看到 每次选择的路径的过程是一致的

  • 可以使用递归
  • 递归的退出是 depth 到最后

整个代码

点击查看代码
$num = 1;
function dfs($str, $len, $depth, $path, $used)
{

    // 深度已经结束退出选择
    if ($depth == $len) {
        global $num;
        echo $num++, " ", var_export(join('',$path)), PHP_EOL;
        return ;
    }

    //  创建 条件分支 递归分支
    for ($i = 0; $i < $len; $i++) {

        // 标记已经选择的数字
        if ($used[$i]) {
            continue;
        }


        //入栈
        array_push($path, $str[$i]);
        $used[$i] = true;

        // 递归选择
        dfs($str, $len, $depth + 1, $path, $used);

        // 回溯 撤下上一次选择
        array_pop($path);
        $used[$i] = false;


    }

}

$str = "abc";
dfs($str, strlen($str),0,[],[]);

标签:排列,递归,DFS,depth,used,len,str,path,php
From: https://www.cnblogs.com/guanchaoguo/p/16846202.html

相关文章

  • 洛谷 P1464 Function(dfs+记忆化搜索)
    https://www.luogu.com.cn/problem/P1464单个返回条件的时候,直接return多个返回条件的时候,采用记忆化搜索思想,边存储边继续往下搜索中间穿插记忆化判断,如果之前有过此......
  • 安装PHP7.0.32(yum安装、源码安装)
    源码安装PHP​​1、简介​​​​2、yum安装PHP及扩展所需插件​​​​A、安装​​​​B、验证​​​​C、如果安装出现错误,改变yum安装源​​​​3、源码安装PHP​​​​A、......
  • 学习笔记-PHP反序列化
    PHP反序列化相关文章&Source&ReferenceWeb安全|PHP反序列化入门这一篇就够了php反序列化练习题php反序列化知识点总结相关工具php在线反序列化工具PHP......
  • 学习笔记-phpinfo
    phpinfo相关文章phpinfo可以告诉我们什么PHPINFO中的重要信息amazingphpinfo()phpinfo中值得注意的信息php中函数禁用绕过的原理与利用相关工具proudwind......
  • 学习笔记- PHP回调函数
    PHP回调函数call_user_funccall_user_func—把第一个参数作为回调函数调用,其余参数是回调函数的参数<?phpcall_user_func($_GET['a1'],$_GET['a2']);?>//xx......
  • 学习笔记-绕过php禁用函数
    bypass_disable_function相关文章&Source&ReferenceCTF中的命令执行绕过无需sendmail:巧用LD_PRELOAD突破disable_functionsphp中函数禁用绕过的原理与利用相......
  • 学习笔记-绕过php文件目录访问限制
    bypass_open_basedir相关文章&Source&Referencephp中函数禁用绕过的原理与利用利用symlink通过建立软链达成bypass<?phpsymlink("abc/abc/abc/abc","temp......
  • Linux findfs 命令
    Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与......
  • ABC 275 ABCD ( dfs / 递推递归+记忆化搜索)
    https://atcoder.jp/contests/abc275/tasksA-FindTakahashi题目大意:求数组最大值的数字下标。SampleInput13508070SampleOutput12#include<bits/st......
  • PHP 广度有限搜索和深度优先 DFS/BFS
    广度有优先可以实现二叉树的层级遍历优先将根节点加入队列取出来一个节点进行处理依次词节点的子节点入队没有就不放入队列非空则继续重复取出一个节点加入子节......