JAVA實習找工作——深度優先搜索

深度優先搜索,又叫做dfs,是一種搜索算法,關於這種算法最好就是題目實踐,下面舉幾個例子講解dfs

例題1:輸入n,請輸出1-n的全排列

深度優先搜索的思路如下

public static void dfs(int step){
    判斷邊界,遞歸的出口

    for(嘗試每一種可能){
        繼續下一步dfs(step+1)
    }
}

這裏假設n=3,那麼就是求解1-3的全排列,因爲簡單可以輕鬆得到答案

123,132,213,231,312,321

那麼使用dfs的思路就是,具體代碼如下

public static void dfs(int step){
    if(step == 4){
        打印前三步排好的數字
    }

    從1-3開始看看能不能排
    dfs(step+1)
}
package com.note;

import java.util.Scanner;

/**
 * 輸入n
 * 輸出1-n的全排列
 */
public class dfs數的全排列 {
    private static int n;
    private static int[] arr;
    private static int[] book;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        n = sc.nextInt();
        arr = new int[n+1];
        book = new int[n+1];

        dfs(1);

    }

    private static void dfs(int step) {
        if (step == n+1){
            for (int i=1;i<=n;i++)
                System.out.print(arr[i]);
            System.out.println();
            return;
        }

        for (int i=1;i<=n;i++){
            if (book[i] == 0){
                book[i] = 1;
                arr[step] =i;
                dfs(step+1);
                book[i] = 0;
            }
        }


    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章