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

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

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

    Feng.Li's Java See

    抓緊時間,大步向前。
    隨筆 - 95, 文章 - 4, 評論 - 58, 引用 - 0
    數據加載中……

    人工智能八數碼算法

    public class BaShuMa {
    ?
    ?static int[][] chu = {{2,8,3},{1,6,4},{7,0,5}};
    ?static int[][] biao = {{1,2,3},{8,0,4},{7,6,5}};
    ?static int[][] now = chu;
    ?static int i0 =2;
    ?static int j0 =1;
    ??? static int bushu = 0;
    ???? boolean left = false;
    ??boolean right = false;
    ??boolean up = false;
    ??boolean down = false;
    ?
    ?

    ?
    ?static String lujing = "";
    ??????
    ?/*返回當前數組的在位數*/
    ?public static int buzaiwei(int a[][]) {
    ??int sum = 0;
    ??for(int i=0;i<=2;i++) {
    ???for(int j=0;j<=2;j++) {
    ????if(a[i][j] == biao[i][j]&&a[i][j]!=0) {
    ?????sum++;
    ????}
    ????
    ????}
    ???}
    ???return sum;
    ??}
    ?/*判斷0所在的位置*/?
    ??public void i0j0weizhi(int[][] a) {
    ???int[] b = new int[2];
    ???for(int i=0;i<=2;i++) {
    ????for(int j=0;j<=2;j++) {
    ?????if(a[i][j]==0) {
    ??????i0 = i;
    ??????j0 = j;
    ??????b[0] = i0;
    ??????b[1] = j0;
    ??????
    ??????????????? }
    ????}
    ???}
    ???
    ??}
    ??
    ?/*以當前數組的i0.j0為參數,求出當前的可用規則集,并用4個boolean值來防止逆操作*/
    ?public? String keyonggueizeji(int c,int d) {
    ??
    ??String keyonggueize = "";
    ??if(d>=1&&right==false) {
    ???keyonggueize = keyonggueize + "z";
    ???
    ??}
    ??if(c>=1&&down==false) {
    ???keyonggueize = keyonggueize + "s";
    ???
    ??}
    ??if(d<=1&&left==false) {
    ???keyonggueize = keyonggueize + "y";
    ???
    ??}
    ??if(c<=1&&up==false) {
    ???keyonggueize = keyonggueize + "x";
    ???
    ??}
    ??return keyonggueize;
    }?? /*走步函數*/
    ??? public void zoubu(int c,int d) {
    ????
    ?? int k1 = 0;
    ?? int k2 = 0;
    ?? int k3 = 0;
    ?? int k4 = 0;
    ?? int[][] b1={{2,8,3},{1,6,4},{7,0,5}};
    ?? int[][] b2={{2,8,3},{1,6,4},{7,0,5}};
    ?? int[][] b3={{2,8,3},{1,6,4},{7,0,5}};?
    ? int[][] b4={{2,8,3},{1,6,4},{7,0,5}};
    ? for(int i=0;i<=2;i++) {
    ? ?for(int j=0;j<=2;j++) {
    ? ??b1[i][j]=now[i][j];
    ? ?}
    ? }
    ? for(int i=0;i<=2;i++) {
    ? ?for(int j=0;j<=2;j++) {
    ? ??b2[i][j]=now[i][j];
    ? ?}
    ? }
    ? for(int i=0;i<=2;i++) {
    ? ?for(int j=0;j<=2;j++) {
    ? ??b3[i][j]=now[i][j];
    ? ?}
    ? }
    ? for(int i=0;i<=2;i++) {
    ? ?for(int j=0;j<=2;j++) {
    ? ??b4[i][j]=now[i][j];
    ? ?}
    ? }
    ?
    ? /*int[][] b1 = {{2,8,3},{1,6,4},{7,0,5}};
    ?? int[][] b2 = {{2,8,3},{1,6,4},{7,0,5}};
    ?? int[][] b3 = {{2,8,3},{1,6,4},{7,0,5}};?
    ? int[][] b4 = {{2,8,3},{1,6,4},{7,0,5}};*/
    ? i0j0weizhi(now);
    ? /*System.out.println(i0);
    ? System.out.println(j0);
    ? for(int a=0;a<=2;a++) {
    ??????????? ?for(int b=0;b<=2;b++) {
    ??????????? ??System.out.println(now[a][b]);
    ??????????? ?}
    ??????????? }*/

    ?
    ?
    ??/*判斷是否在字符串里有z*/
    ?
    ?if(keyonggueizeji(i0,j0).indexOf("z")!=-1) {
    ??
    ????
    ???
    ??
    ??b1[i0][j0] = b1[i0][j0-1];
    ??b1[i0][j0-1] = 0;
    ???? k1 = buzaiwei(b1);?
    ?
    }

    ?if(keyonggueizeji(i0,j0).indexOf("s")!=-1) {
    ??b2[i0][j0] = b2[i0-1][j0];
    ??b2[i0-1][j0] = 0;
    ??k2 =buzaiwei(b2);
    }
    ?
    ?if(keyonggueizeji(i0,j0).indexOf("y")!=-1) {
    ??b3[i0][j0] = b3[i0][j0+1];
    ??b3[i0][j0+1] = 0;
    ??k3 = buzaiwei(b3);
    }
    ?
    ?if(keyonggueizeji(i0,j0).indexOf("x")!=-1) {
    ??b4[i0][j0] = b4[i0+1][j0];
    ??b4[i0+1][j0] = 0;
    ???? k4 =buzaiwei(b4);
    }
    ??? if(k1>k2&&k1>k3&&k1>k4) {
    ??bushu++;
    ??lujing = lujing + "左";
    ??j0 = j0 -1;
    ??now = b1;
    ??left = true;
    ??up = false;
    ??down = false;
    ??right = false;
    ??/*for(int a=0;a<=2;a++) {
    ??????????? ?for(int b=0;b<=2;b++) {
    ??????????? ??System.out.println(now[a][b]);
    ??????????? ?}*/
    ??
    ?}

    ?if(k2>k1&&k2>k3&&k2>k4) {
    ??bushu++;
    ??lujing = lujing + "上";
    ??i0 = i0 - 1;
    ??now = b2;
    ??left = false;
    ??up = true;
    ??down = false;
    ??right = false;
    ?
    ?}
    ?if(k3>k1&&k3>k2&&k3>k4) {
    ??bushu++;
    ??lujing = lujing + "右";
    ??j0 = j0 +1;
    ??now = b3;
    ??left = false;
    ??up = false;
    ??down = false;
    ??right = true;
    ?
    ?}
    ?if(k4>k1&&k4>k2&&k4>k3) {
    ??bushu++;
    ??lujing = lujing + "下";
    ??i0 = i0 + 1;
    ??now = b4;
    ??left = false;
    ??up = false;
    ??down = true;
    ??right = false;
    ??
    ?}
    ?if(k1==k2&&k1>k3&&k1>k4) {
    ??bushu ++;
    ??lujing = lujing + "上";
    ???? i0 = i0 - 1;
    ??now = b2;
    ??left = false;
    ??up = true;
    ??down = false;
    ??right = false;
    ?
    ??
    ???

    ?}
    }

    ?

    ?


    ??? public static void main(String[] args) {
    ??????? BaShuMa bashuma = new BaShuMa();
    ??????? System.out.println("給定的初始狀態數組為:");
    ??? ?for(int i=0;i<=2;i++) {
    ??? ??
    ??? ???System.out.print(chu[0][i]);
    ??? ??
    ??? ?}
    ??? ?System.out.println();
    ??? ?for(int i=0;i<=2;i++) {
    ??? ????? System.out.print(chu[1][i]);
    ??? ??? }
    ??? ??? System.out.println();
    ??? ?for(int i=0;i<=2;i++) {
    ??? ??System.out.print(chu[2][i]);
    ??? ??}
    ??? ??System.out.println();
    ??????? System.out.println("***********************");
    ??? ???? ?System.out.println("給定的目標狀態數組為:");
    ??? ?for(int i=0;i<=2;i++) {
    ??? ??
    ??? ???System.out.print(biao[0][i]);
    ??? ??
    ??? ?}
    ??? ?System.out.println();
    ??? ?for(int i=0;i<=2;i++) {
    ??? ????? System.out.print(biao[1][i]);
    ??? ??? }
    ??? ??? System.out.println();
    ??? ?for(int i=0;i<=2;i++) {
    ??? ??System.out.print(biao[2][i]);
    ??? ??}
    ??????? System.out.println();
    ??????? System.out.println("***********************");
    ??????? System.out.println("行走步驟為:");
    ??????? while(true)
    ??????? if(bashuma.buzaiwei(now)!=8) {
    ??????? ?bashuma.zoubu(i0,j0);
    ??????????? for(int i=0;i<=2;i++) {
    ??? ??
    ??? ???System.out.print(now[0][i]);
    ??? ??
    ??? ?}
    ??? ?System.out.println();
    ??? ?for(int i=0;i<=2;i++) {
    ??? ????? System.out.print(now[1][i]);
    ??? ??? }
    ??? ??? System.out.println();
    ??? ?for(int i=0;i<=2;i++) {
    ??? ??System.out.print(now[2][i]);
    ??? ??}
    ??? ?
    ??????? System.out.println();
    ??????? System.out.println("***********************");
    ??? }
    ??????? else {
    ??????? ?break;
    ??????? }
    ??? System.out.println("走步的路線為:"+lujing);
    ??? System.out.println("需要的步數為:"+bushu);?
    ??????? //bashuma.zoubu(i0,j0);
    ??????? //System.out.println(bashuma.alldepth(chu));
    ???????
    ??? }
    }

    posted on 2006-12-14 18:00 小鋒 閱讀(1912) 評論(1)  編輯  收藏 所屬分類: algorithm

    評論

    # re: 人工智能八數碼算法[未登錄]  回復  更多評論   

    博主 我想求一個八數碼游戲的原代碼
    要求如下:
    8個編有數碼1~8的滑牌,能在3×3的井字格中滑動。井字格中有一格是空格,用0表示,因而空格周圍的數碼滑牌都可能滑到空格中去,如下圖所示。
    2 8 3
    1 6 4
    7 0 5

    目標布局如下:
    1 2 3
    4 5 6
    7 8 0

    編制該游戲,要求:
    ? 游戲開始時,隨機產生一個布局。
    ? 使用鼠標操縱方格的移動。
    ? 也可以使用鍵盤操縱,比如使用數字鍵1~8分別控制方塊1~8的移動。
    ? 點擊不能移動的方格要給出適當的提示。
    是個初學者,完全菜鳥級。這個程序急需,希望博主看到后,施個援手吧
    2008-01-08 11:01 | 菜鳥
    主站蜘蛛池模板: 美女视频免费看一区二区| 国产精品亚洲自在线播放页码| 久久精品国产亚洲AV忘忧草18| 99久热只有精品视频免费观看17| 国产精品久久久亚洲| 国产精品99久久免费观看| 亚洲av中文无码乱人伦在线咪咕| 亚在线观看免费视频入口| 91亚洲一区二区在线观看不卡 | 亚洲欧洲自拍拍偷午夜色无码| 久久高潮一级毛片免费| 亚洲五月综合缴情在线观看| 久久久久成人精品免费播放动漫| 亚洲视频一区在线| 我要看免费的毛片| 2022国内精品免费福利视频| 久久亚洲免费视频| 青草草色A免费观看在线| 无码亚洲成a人在线观看| 亚洲精品黄色视频在线观看免费资源| 国产高清对白在线观看免费91 | 91麻豆精品国产自产在线观看亚洲 | 亚洲乱码精品久久久久..| 午夜爽爽爽男女免费观看影院| 中文字幕亚洲精品| 热久久精品免费视频| 中文无码日韩欧免费视频| 久久亚洲日韩看片无码| 精品免费国产一区二区| 亚洲天堂免费在线视频| 久久精品国产亚洲AV无码娇色| 成人免费男女视频网站慢动作 | 久久A级毛片免费观看| 亚洲中文无码永久免| 亚洲中久无码不卡永久在线观看| 日韩精品免费视频| 亚洲精华国产精华精华液| 亚洲午夜福利717| 最新69国产成人精品免费视频动漫| 狼色精品人妻在线视频免费| 免费人成动漫在线播放r18|