美文网首页Aha! Algorithms
Aha! Algorithms - Depth First Se

Aha! Algorithms - Depth First Se

作者: su3 | 来源:发表于2017-03-17 20:12 被阅读0次

    《啊哈!算法》第 4 章第 1 节,深度优先搜索的 Swift 实现。

    问题

    输入一个数 n,输出 1~n 的全排列

    解决

    假设有编号 1、2、3 张纸牌,放入 1、2、3 号盒子中,每个盒子都按照 1、2、3 的顺序依次尝试。

    let n = 3 //取值范围从1~n
    //下标 0 的位置没有使用,因此要初始化 n+1 项
    var a = [Int](repeatElement(0, count: n+1)) //准备用来放数字的盒子
    var book = [Int](repeatElement(0, count: n+1)) //记录已放入的数字
    
    func dfs(step: Int){
        //如果站在 n+1 个盒子前,表示前 n 个盒子已经放好数字
        if step == n+1 {
            //输出一种排列
            for i in 1...n {
                print(a[i], separator: "", terminator: "")
            }
            print("\n")
            return
        }
    
        //此时站在地 step 个盒子前
        //按照1、2、3……的顺序一一尝试
        for i in 1...n {
    //        print("step: \(step), i: \(i)")
            //判断数字是否在手上,book[i]=0表示还未放置
            if book[i] == 0 {
                a[step] = i
                book[i] = 1 //牌打出后设为1,表示牌不在手上了
                
                //走到下一个盒子前,函数递归
                dfs(step: step+1)
                //把刚才尝试的牌收回
                book[i] = 0
            }
        }
    }
    
    dfs(step: 1)
    

    代码在 GitHub

    相关文章

      网友评论

        本文标题:Aha! Algorithms - Depth First Se

        本文链接:https://www.haomeiwen.com/subject/mbdynttx.html