亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? java 版本01.txt

?? peg jump此游戲所用到的相關算法,這是java版本
?? TXT
字號:
import java.util.Stack;

public class PegAI {
    public static void main(String[] args) {
        int  b[][]={{2,2,0,1,0,2,2},
                {2,2,1,1,1,2,2},
                {0,1,1,1,1,1,0},
                {1,1,1,0,1,1,1},
                {0,1,1,1,1,1,0},
                {2,2,1,1,1,2,2},
                {2,2,0,1,0,2,2}};

        PegAI pegAI = new PegAI(b);
        pegAI.Search();
        Stack way  = new Stack();
        
        //從closedStack中取出 拔釘子 的路徑放入 way 中
        System.out.println();
        System.out.println("closedStack大小:"+pegAI.closedStack.size());
        while(!pegAI.closedStack.empty()){
            OnePeg wayPeg = (OnePeg) pegAI.closedStack.pop();
            way.push( wayPeg );

        }
        
        
        //輸出 拔釘子 的全部路徑
        System.out.println("way大小:"+way.size());
        int i=1;
        while(!way.empty()){
            OnePeg wayPeg = (OnePeg) way.pop();
            System.out.println("第"+i+"步:"+ (wayPeg.getX()-1) +" "
                    + (wayPeg.getY()-1 )+" " +wayPeg.getDir());
            i++;
        }
        
            

    }

    public PegAI(int input[][]) {
        // 初始化 棋盤,第0行,第8行,第1列,第8列元素都是2,其他是輸入矩陣
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++)
                if (i == 0 || i == 8 || j == 0 || j == 8)
                    board[i][j] = 2; // 設置一個圍墻
                else {
                    board[i][j] = input[i - 1][j - 1];
                    if (board[i][j] == 1)
                        count++;
                }
        
        sum = count;
        son = new int[sum-1];
        tryMove();
        
    }

    public void Search() {
        //打印初始棋盤
        System.out.println("初始棋盤如下:");
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                System.out.print(board[i][j] + " ");
            }
            System.out.println();
        }
        
        System.out.println("一開始,釘子個數" + count);
        System.out.println();
        System.out.println();
        
        long begin = System.currentTimeMillis();
        while (count > 1) {
            times++;

            if (!openStack.empty()) {// openStack非空
                // 把openStack的 棧頂節點 取出放入 closedStack
                OnePeg peg = (OnePeg) openStack.pop();
                count--;
                closedStack.push(peg);

                // 下棋
                switch (peg.getDir()) {
                case 'U':
                    moveUp(peg.getX(), peg.getY());
                    break;
                case 'D':
                    moveDown(peg.getX(), peg.getY());
                    break;
                case 'L':
                    moveLeft(peg.getX(), peg.getY());
                    break;
                case 'R':
                    moveRight(peg.getX(), peg.getY());
                    break;
                }

                if (count > 1 && !tryMove()) { // 釘子剩下不只一個,而且是 死棋,考慮回溯
                    recollection(peg);
                    closedStack.pop(); // closedStack棧頂元素退棧

                    while (father > -1 && son[father] == 0) { // 本層擴展已經全部結束,則其父親節點也不可擴展,將其退棧,并回溯
                        father--;
                        OnePeg Peg = (OnePeg) closedStack.pop();
                        recollection(Peg);
                    }
                }

            } else
                System.out.println("問題無解 - -!");

        }
        long end = System.currentTimeMillis();
        System.out.println("耗時:" + (end - begin) + "毫秒");
        System.out.println("恭喜,闖關成功!!!");
        System.out.println("closedStack中有" + closedStack.size() + "釘子");
        System.out.println("總共走了" + times + "步");

        
        // 打印棋盤
        System.out.println("經過DFS,游戲通關了:");
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                System.out.print(board[i][j] + " ");
            }
            System.out.println();
        }
        System.out.println("結束時,釘子個數" + count);

    }

    // 回溯
    public void recollection(OnePeg peg) {

        if (son[father] > 0) {

            son[father]--;

        }
        count++;

        char dir = peg.getDir();
        int x = peg.getX();
        int y = peg.getY();
        switch (dir) {
        case 'U':
            board[x][y] = 1;
            board[x - 1][y] = 1;
            board[x - 2][y] = 0;
            break;
        case 'D':
            board[x][y] = 1;
            board[x + 1][y] = 1;
            board[x + 2][y] = 0;
            break;
        case 'L':
            board[x][y] = 1;
            board[x][y - 1] = 1;
            board[x][y - 2] = 0;
            break;
        case 'R':
            board[x][y] = 1;
            board[x][y + 1] = 1;
            board[x][y + 2] = 0;
            break;
        }

    }

    // 判斷 并移動和記錄
    public boolean tryMove() {
        int sum = 0;
        for (int i = 0; i < 9; i++)
            for (int j = 0; j < 9; j++) {
                if (board[i][j] == 1)
                    sum += moveAndPush(i, j);
            }
        if (sum > 0) {
            // if(son[father])
            father++; // 此處需要修改
            son[father] = sum;
            return true;
        } else
            return false;
    }

    // 移動和記錄
    public int moveAndPush(int x, int y) {
        int sum = 0;
        if (up(x, y)) {
            openStack.push(new OnePeg(x, y, 'U'));
            sum++;
        }
        if (down(x, y)) {
            openStack.push(new OnePeg(x, y, 'D'));
            sum++;
        }
        if (left(x, y)) {
            openStack.push(new OnePeg(x, y, 'L'));
            sum++;
        }
        if (right(x, y)) {
            openStack.push(new OnePeg(x, y, 'R'));
            sum++;
        }
        return sum;
    }

    // 向上跳
    private void moveUp(int x, int y) {
        board[x][y] = 0;
        board[x - 1][y] = 0;
        board[x - 2][y] = 1;
    }

    // 向下跳
    private void moveDown(int x, int y) {
        board[x][y] = 0;
        board[x + 1][y] = 0;
        board[x + 2][y] = 1;
    }

    // 向左跳
    private void moveLeft(int x, int y) {
        board[x][y] = 0;
        board[x][y - 1] = 0;
        board[x][y - 2] = 1;
    }

    // 向右跳
    private void moveRight(int x, int y) {
        board[x][y] = 0;
        board[x][y + 1] = 0;
        board[x][y + 2] = 1;
    }

    // 判斷向上走的可能性
    private boolean up(int i, int j) {
        if (i > 2 && i < 8 && board[i - 1][j] == 1 && board[i - 2][j] == 0)
            return true;
        else
            return false;
    }

    // 判斷向下走的可能性
    private boolean down(int i, int j) {
        if (i < 6 && i > 0 && board[i + 1][j] == 1 && board[i + 2][j] == 0)
            return true;
        else
            return false;
    }

    // 判斷向左走的可能性
    private boolean left(int i, int j) {
        if (j > 2 && j < 8 && board[i][j - 1] == 1 && board[i][j - 2] == 0)
            return true;
        else
            return false;
    }

    // 判斷向右走的可能性
    private boolean right(int i, int j) {
        if (j < 6 && j > 0 && board[i][j + 1] == 1 && board[i][j + 2] == 0)
            return true;
        else
            return false;
    }

    private int sum = 0;

    private int[] son = null;

    private int father = -1;

    private int times = 0;

    private Stack openStack = new Stack();

    private Stack closedStack = new Stack();

    private int count = 0;

    private int[][] board = new int[9][9];
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线电影一区二区三区| 亚洲尤物在线视频观看| 亚洲欧美一区二区三区国产精品| 亚洲成人综合在线| 成人av资源在线观看| 欧美日韩国产美| 亚洲日本护士毛茸茸| 精品一区二区精品| 欧美日韩一区二区三区视频| 国产欧美精品区一区二区三区 | 国产精品国产三级国产三级人妇 | 久久精品日韩一区二区三区| 亚洲va欧美va人人爽| 成人aa视频在线观看| 久久男人中文字幕资源站| 亚洲va欧美va人人爽午夜| 色综合天天综合给合国产| 久久久91精品国产一区二区精品 | 国产一区亚洲一区| 日韩一级片在线播放| 亚洲成人一区在线| 欧美中文字幕一二三区视频| 中文字幕一区二区在线播放| 国产成人在线免费观看| 精品精品国产高清一毛片一天堂| 香蕉乱码成人久久天堂爱免费| 色网站国产精品| 亚洲美女屁股眼交3| 99麻豆久久久国产精品免费优播| 国产日韩欧美制服另类| 国产裸体歌舞团一区二区| 精品国产乱码久久久久久久久| 日韩国产欧美三级| 91麻豆精品国产综合久久久久久| 五月天激情综合| 欧美精品777| 日本不卡123| 日韩欧美中文字幕公布| 久久不见久久见免费视频7| 日韩午夜小视频| 国产在线不卡一卡二卡三卡四卡| 日韩精品中午字幕| 国模套图日韩精品一区二区 | 在线一区二区三区做爰视频网站| 国产精品美女一区二区| 成人午夜av影视| 日韩美女久久久| 在线欧美小视频| 日韩电影在线观看电影| 日韩手机在线导航| 国产精品亚洲综合一区在线观看| 欧美极品另类videosde| 91视频在线看| 日韩黄色一级片| 26uuu国产电影一区二区| 成人aa视频在线观看| 亚洲一区国产视频| 欧美一级国产精品| 丁香桃色午夜亚洲一区二区三区| 国产精品第一页第二页第三页| 欧洲一区在线电影| 极品美女销魂一区二区三区 | 欧美美女网站色| 九九热在线视频观看这里只有精品| 久久久亚洲欧洲日产国码αv| 91亚洲永久精品| 青娱乐精品在线视频| 国产精品全国免费观看高清| 欧美色综合影院| 国产一区二区女| 一区二区三区在线免费视频| 日韩一级黄色片| 91在线视频网址| 免费看精品久久片| 亚洲天堂a在线| 精品免费日韩av| 在线看不卡av| 国产91精品欧美| 日韩一区欧美二区| 18成人在线观看| 26uuu国产日韩综合| 欧美亚洲综合另类| av在线一区二区三区| 久久99日本精品| 亚洲.国产.中文慕字在线| 国产女人18毛片水真多成人如厕 | 26uuu亚洲综合色| 欧美在线不卡视频| 99久久综合精品| 九九视频精品免费| 日韩—二三区免费观看av| 亚洲男人的天堂av| 日本一区二区三区久久久久久久久不 | 亚洲bt欧美bt精品777| 欧美极品美女视频| 久久夜色精品国产噜噜av| 欧美精选一区二区| 欧美影视一区在线| jizzjizzjizz欧美| 国产成人精品亚洲午夜麻豆| 蜜臀国产一区二区三区在线播放 | 99久久精品免费观看| 国产一区二区三区在线观看免费| 日韩黄色免费网站| 亚洲一区二区欧美日韩| 亚洲欧洲另类国产综合| 国产欧美日韩视频一区二区| 久久亚洲二区三区| 久久综合色8888| 欧美成人一区二区| 欧美成人精品二区三区99精品| 欧美少妇性性性| 欧美日韩视频第一区| 色av成人天堂桃色av| 色综合 综合色| 在线观看免费成人| 色一情一乱一乱一91av| 在线影院国内精品| 欧美三级电影精品| 69p69国产精品| 91精品国产一区二区三区香蕉| 欧美巨大另类极品videosbest | 蜜臀av一区二区| 美女视频一区在线观看| 另类小说视频一区二区| 国产一区二区三区电影在线观看| 国产精品一卡二卡| 成人激情午夜影院| 色视频欧美一区二区三区| 91国模大尺度私拍在线视频| 在线观看视频一区二区欧美日韩| 欧美三级电影在线观看| 日韩三级视频在线看| 日韩一区二区在线播放| 日韩欧美国产麻豆| 国产日韩欧美精品在线| 国产精品日韩精品欧美在线| 亚洲欧美日韩久久| 日韩中文字幕区一区有砖一区| 久久国产精品免费| 波多野结衣的一区二区三区| 91福利资源站| 日韩一区二区中文字幕| 中文一区在线播放| 亚洲一区二区三区四区的 | 亚洲高清免费在线| 久久精品99国产国产精| 国产iv一区二区三区| 在线国产亚洲欧美| 亚洲精品一区二区精华| 亚洲少妇中出一区| 日韩不卡一二三区| 国产91丝袜在线观看| 91免费版pro下载短视频| 欧美一区二区三区四区视频| 国产欧美一区在线| 五月婷婷久久丁香| 国产+成+人+亚洲欧洲自线| 欧美三级电影网站| 中文字幕国产精品一区二区| 亚洲成av人片在线| 成人动漫视频在线| 日韩欧美一区二区三区在线| 国产精品青草综合久久久久99| 亚洲bt欧美bt精品| 97久久精品人人做人人爽50路| 91精品国产91热久久久做人人| 国产精品久久二区二区| 麻豆一区二区三区| 在线看国产一区二区| 中文字幕乱码日本亚洲一区二区| 亚洲成人自拍偷拍| 91香蕉视频在线| 国产欧美日韩不卡免费| 美女高潮久久久| 欧美午夜寂寞影院| 亚洲欧洲精品一区二区精品久久久| 久久精品久久久精品美女| 色综合中文字幕| 日本一区二区三区高清不卡 | 亚洲免费av高清| 国产福利一区二区| 日韩美女视频在线| 日韩国产欧美在线视频| 欧美午夜寂寞影院| 亚洲精品免费在线| 99久久国产免费看| 欧美激情一区二区三区全黄| 日本va欧美va精品发布| 欧美精品精品一区| 亚洲午夜视频在线| 91亚洲永久精品| 亚洲天堂精品视频| 91在线porny国产在线看| 国产精品久久久久影院亚瑟 | 久久久99精品久久| 国产精品影视网| 久久久久久久久久久久久夜| 美女诱惑一区二区| 欧美大黄免费观看|