<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 | 菜鳥
    主站蜘蛛池模板: 97免费人妻无码视频| 久久国产高潮流白浆免费观看| 青青草免费在线视频| 亚洲国产精品网站久久| 久久午夜无码免费| 久久精品国产亚洲av成人| 久久久久久国产精品免费无码 | 国产麻豆免费观看91| 亚洲色偷偷综合亚洲AV伊人蜜桃| 999久久久免费精品国产| 亚洲入口无毒网址你懂的| 亚洲免费网站观看视频| 天堂亚洲国产中文在线| 免费看的一级毛片| 亚洲精品无码久久久久A片苍井空| 国产成人精品男人免费| 一级**爱片免费视频| 久久亚洲国产午夜精品理论片| 日韩精品无码一区二区三区免费| 亚洲第一网站免费视频| 女人18毛片a级毛片免费| 男男gvh肉在线观看免费| 国产亚洲av片在线观看播放| 91高清免费国产自产拍2021| 亚洲av无码专区在线| 国产大片91精品免费观看男同| 一级做a毛片免费视频| 久久亚洲国产伦理| 真实国产乱子伦精品免费| 亚洲毛片基地4455ww| 国产片免费福利片永久| 好吊色永久免费视频大全 | 免费毛片在线看不用播放器| 色播亚洲视频在线观看| 午夜视频免费成人| 久久成人永久免费播放| 亚洲日韩乱码中文无码蜜桃| 国产婷婷高清在线观看免费| 国产白丝无码免费视频| 含羞草国产亚洲精品岁国产精品 | 亚洲AV色无码乱码在线观看|