<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一区二区三区四区| 亚洲日韩AV一区二区三区四区| 婷婷国产偷v国产偷v亚洲| 99免费在线视频| 免费H网站在线观看的| 国产精品亚洲mnbav网站 | 亚洲国产精品综合久久一线| 亚洲综合一区二区精品导航| 麻豆安全免费网址入口| **aaaaa毛片免费| 久久精品夜色噜噜亚洲A∨| 亚洲五月综合网色九月色| a级毛片免费在线观看| 亚洲欧洲∨国产一区二区三区| 亚洲乱码中文字幕在线| 四虎影视大全免费入口| 亚洲精品无码专区久久久| 免费一级毛片在线播放视频免费观看永久 | 日韩久久无码免费毛片软件| 一本久到久久亚洲综合| 亚洲免费福利视频| 毛片在线全部免费观看| 国产乱辈通伦影片在线播放亚洲 | aa级一级天堂片免费观看| 亚洲AV日韩精品久久久久| a一级毛片免费高清在线| 国产乱色精品成人免费视频 | WWW国产成人免费观看视频| 亚洲AV无码一区二区乱孑伦AS| 免费国产黄网站在线看| 国产AV无码专区亚洲AV手机麻豆| 午夜亚洲乱码伦小说区69堂| 成年女人色毛片免费看| 亚洲1234区乱码| 18勿入网站免费永久| 亚洲成a人片在线网站| 57pao国产成永久免费视频| 亚洲色大成网站www久久九| 丁香花在线观看免费观看 | 亚洲视频精品在线|