<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    march alex's blog
    hello,I am march alex
    posts - 52,comments - 7,trackbacks - 0
    深度優先搜索(depth-first search,簡稱dfs)就是遞歸地進行一系列操作,直到找到想要的結果或者搜到頭了(無路可走)。
    我對深度優先搜索的總結就是:
        (1)不見南墻不回頭
        (2)找到以后往回走
    深度優先搜索其實和我們大多數人小時候走迷宮時選擇的策略非常類似。

    深度優先搜索有一個很簡單的例子:求n!。
    int f(int n) {
        if(n == 0 || n == 1) return 1;
        return f(n-1) * n;
    }
    我們以現在ACM競賽中一道簡單的競賽題 -- 素數環 為例,來講解深度優先搜索。點此進入題目描述

    這道題目的意思是,找到所有的素數環輸出。
    我們可以寫下對應的偽代碼:
    function dfs(深度) {
        if(深度 == 1) {
            第1個點確定為1;
            第1個點標記訪問過了;
            dfs(深度+1);
            撤銷第1個點的標記;
        }
        else {
            for(i = 1 to n) {
                if(i加上第(深度-1)個點的值是素數 and i沒有被訪問過) {
                    第(深度)個點確定為i;
                    第i個點標記訪問過了;
                    dfs(深度+1);
                    撤銷第i個點的標記;
                }
            }
        }
        if(深度 > n) {
            if(第(深度-1)個點的值+1是素數) {
                輸出這串素數環;
            }
            return;
        }
        return;
    }
    簡單了解了深度優先搜索,并且差不多看懂了這個偽代碼,我們就可以用代碼實現一下了。下面是完整的Java代碼:
    import java.util.Scanner;


    public class Main {
        
        public static boolean isprime(int n) {
            if(n ==2 || n == 3 || n == 5 || n == 7 || n == 11 || n == 13 || n == 17 || n == 19 ||
                    n == 23 || n == 29 || n == 31 || n == 37 || n == 41)
                return true;
            return false;
        }
        
        private static boolean[] vis = new boolean[22];
        private static int[] ans = new int[22];
        private static Scanner in;
        
        public static void dfs(int dep,int n) {
            for(int i=1;i<=n;i++) {
                if(vis[i] == false && isprime(ans[dep-1] + i)) {
                    vis[i] = true;
                    ans[dep] = i;
                    if(dep == n && isprime(1+i)) {
                        System.out.print(ans[1]);
                        for(int i1=2;i1<=n;i1++) System.out.print(" " + ans[i1]);
                        System.out.println("");
                        vis[i] = false;
                        return;
                    } else if(dep == n) {
                        vis[i] = false;
                        return;
                    }
                    dfs(dep+1, n);
                    vis[i] = false;
                }
            }
            return;
        }
        
        public static void main(String[] args) {
            
            in = new Scanner(System.in);
            int cnt = 0;
            while(in.hasNext()) {
                int n = in.nextInt();
                for(int i=1;i<=n;i++) vis[i] = false;
                cnt ++;
                System.out.println("Case " + cnt + ":");
                vis[1] = true;
                ans[1] = 1;
                dfs(2, n);
                System.out.println("");
            }
        }
        
    }

    遞歸地一種很好玩的現象:德羅斯特效應
    posted on 2015-03-07 20:47 marchalex 閱讀(193) 評論(0)  編輯  收藏 所屬分類: java小程序
    主站蜘蛛池模板: 久久亚洲免费视频| 亚洲精品无码久久久久sm| 亚洲国产美国国产综合一区二区| eeuss影院ss奇兵免费com| 亚洲麻豆精品国偷自产在线91| 自拍偷自拍亚洲精品播放| 日本一区二区三区日本免费| 日韩国产欧美亚洲v片| 国产大片免费观看中文字幕| 日本一区二区在线免费观看| 久久久久亚洲AV成人网人人软件 | 亚洲av鲁丝一区二区三区| 好久久免费视频高清| 亚洲午夜精品一区二区| 无码国产精品一区二区免费| 精品国产日韩久久亚洲| 日本人的色道www免费一区| 国产精品观看在线亚洲人成网| 亚洲AV日韩精品一区二区三区| 久久免费视频一区| 亚洲大片在线观看| 成人免费视频网址| 成人免费观看男女羞羞视频| 日韩亚洲人成在线综合日本| 青草草色A免费观看在线| 色九月亚洲综合网| 亚洲成AV人片天堂网无码| 国产精品入口麻豆免费观看| 国产精品久久久久久亚洲小说| 亚洲中文字幕无码爆乳av中文| 三年片在线观看免费观看大全动漫 | 国产一区二区视频免费| 中国好声音第二季免费播放| 亚洲无圣光一区二区| 国产免费观看青青草原网站| 午夜视频在线免费观看| 在线综合亚洲欧洲综合网站| 国产精品亚洲不卡一区二区三区| 99re这里有免费视频精品| 精品韩国亚洲av无码不卡区| 亚洲人成网站在线播放影院在线|