<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小程序
    主站蜘蛛池模板: 污污污视频在线免费观看| 亚洲日本VA午夜在线电影| 一级毛片不卡免费看老司机| 亚洲 综合 国产 欧洲 丝袜| 亚洲av成人无码网站…| 国产国产人免费视频成69大陆| 亚洲色丰满少妇高潮18p| 在线观看免费为成年视频| 久久精品熟女亚洲av麻豆| 国产一级高清视频免费看| 羞羞视频免费网站入口| 久久久久国产成人精品亚洲午夜| www永久免费视频| 亚洲福利在线视频| 国产成人精品免费视频网页大全 | 在线看片v免费观看视频777 | 亚洲国产午夜精品理论片在线播放| 成人免费视频观看无遮挡| 美女视频黄a视频全免费网站色| www亚洲精品少妇裸乳一区二区| 日韩大片免费观看视频播放| 亚洲永久精品ww47| 2021在线永久免费视频| 亚洲综合激情五月色一区| 免费播放特黄特色毛片| 亚洲免费观看视频| 国产精品亚洲综合五月天| 国产婷婷高清在线观看免费| 久久久久久噜噜精品免费直播 | 亚洲欧洲精品成人久久曰| 亚洲国产高清在线一区二区三区| 中文字幕视频在线免费观看| 亚洲高清免费在线观看| 狼友av永久网站免费观看| 中文字幕av无码不卡免费| 亚洲性一级理论片在线观看| 免费a级毛片永久免费| 精品国产免费一区二区三区香蕉| 亚洲专区一路线二| 国产亚洲精品资在线| 久久久久久久久免费看无码|