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

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

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

    春風(fēng)博客

    春天里,百花香...

    導(dǎo)航

    <2008年4月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    統(tǒng)計

    公告

    MAIL: junglesong@gmail.com
    MSN: junglesong_5@hotmail.com

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(224)

    隨筆檔案(126)

    個人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    使用全排列方法解九宮格問題

    下面的方法能解出九宮格,但對于更高階只有理論可能性,因為耗時太長,不能作為通用解決方案。

    輸出:
    2    7    6    
    9    5    1    
    4    3    8   


    package com.sitinspring;

    public class SquarePuzzle{
        
    /**
         * 階數(shù)
         
    */
        
    private int n;
        
        
    /**
         * 方陣數(shù)組
         
    */
        
    private Integer[] arr;
        
        
    /**
         * 平均值
         
    */
        
    private int average;
        
        
    public SquarePuzzle(int n){
            
    this.n=n;
            
            
    // 建立數(shù)組并得到平均值
            arr=new Integer[n*n];
            
            average
    =0;
            
    for(int i=1;i<=n*n;i++){
                arr[i
    -1]=i;
                average
    +=i;
            }
            average
    =average/n;
            
            
    // 遞歸查看
            permutation(arr,0,arr.length);
        }
        
        
    private void permutation(Integer[] arr,int start,int end){
            
    if(start<end+1){
                permutation(arr,start
    +1,end);
                
                
    for(int i=start+1;i<end;i++){
                    Integer temp;
                    
                    temp
    =arr[start];
                    arr[start]
    =arr[i];
                    arr[i]
    =temp;
                    
                    permutation(arr,start
    +1,end);
                    
                    temp
    =arr[i];
                    arr[i]
    =arr[start];
                    arr[start]
    =temp;
                }
            }
            
    else{
                
    /*for(int i=0;i<end;i++){
                    System.out.print(arr[i]);
                }
                System.out.print("\n");
    */
                
                
    int i,sum=0;
                
                
    for(i=0;i<n;i++){
                    sum
    +=arr[i];
                }
                
                
    if(sum!=average){
                    
    return;
                }
                
                
    // 查看是否縱橫對角線值都相等
                checkAndPrint(arr);
            }
        }
        
        
    private void checkAndPrint(Integer[] arr){
            Integer[][] arr2
    =new Integer[n][n];
            
    int i,j,sum;
            
            
    for(i=0;i<n;i++){
                
    for(j=0;j<n;j++){
                    arr2[i][j]
    =arr[i*n+j];
                }
            }
            
            
    // 橫
            for(i=0;i<n;i++){
                sum
    =0;
                
    for(j=0;j<n;j++){
                    sum
    +=arr2[i][j];
                }
                
                
    if(sum!=average){
                    
    return;
                }
            }
            
            
    // 縱
            for(i=0;i<n;i++){
                sum
    =0;
                
    for(j=0;j<n;j++){
                    sum
    +=arr2[j][i];
                }
                
                
    if(sum!=average){
                    
    return;
                }
            }
            
            
    // 對角線
            sum=0;
            
    for(i=0;i<n;i++){
                sum
    +=arr2[i][i];        
            }
            
            
    if(sum!=average){
                
    return;
            }
            
            
    // 對角線
            sum=0;
            
    for(i=0;i<n;i++){
                sum
    +=arr2[i][n-i-1];        
            }
            
            
    if(sum!=average){
                
    return;
            }
            
            
    // 最終打印
            for(i=0;i<n;i++){
                
    for(j=0;j<n;j++){
                    System.out.print(arr2[i][j]
    +"\t");;
                }
                
                System.out.print(
    "\n");;
            }
            System.out.print(
    "\n");;
            System.exit(
    0);
        }
        
        
    public static void main(String[] args){
            
    new SquarePuzzle(3);
        }
    }

    posted on 2008-04-08 22:16 sitinspring 閱讀(2092) 評論(1)  編輯  收藏 所屬分類: 算法數(shù)據(jù)結(jié)構(gòu)

    評論

    # re: 使用全排列方法解九宮格問題 2008-11-19 19:27 楊鞠孝

    好   回復(fù)  更多評論   

    sitinspring(http://www.tkk7.com)原創(chuàng),轉(zhuǎn)載請注明出處.
    主站蜘蛛池模板: 精品亚洲综合久久中文字幕| 97人妻精品全国免费视频| 亚洲黄色在线观看| 亚洲精品国产精品乱码不卡| 成人在线免费观看| 亚洲免费视频网址| 日韩电影免费在线观看| a一级毛片免费高清在线| 午夜亚洲WWW湿好爽| 亚洲一区在线观看视频| 久久综合亚洲色HEZYO社区| 亚洲成色在线综合网站| 亚洲美女高清一区二区三区 | 又爽又黄无遮挡高清免费视频| 成年人视频免费在线观看| 国产成人精品无码免费看| 中文字幕不卡免费视频| 特级毛片免费播放| 亚洲av成人片在线观看| 亚洲影院天堂中文av色| 亚洲性无码一区二区三区| 亚洲人成综合在线播放| 亚洲精品偷拍无码不卡av| 久久av无码专区亚洲av桃花岛| 亚洲VA成无码人在线观看天堂| 亚洲精品成人片在线观看精品字幕 | 亚洲国产成+人+综合| 亚洲AV无码国产精品色午友在线 | 亚洲午夜在线电影| 久久久久久久久亚洲| 亚洲福利视频导航| 亚洲精品无码不卡| 亚洲美女人黄网成人女| 亚洲免费视频网址| 亚洲国产一区在线观看| 亚洲激情视频图片| 亚洲日本一线产区和二线 | 最近2019中文字幕免费看最新 | 亚洲综合无码无在线观看| 国产精品亚洲综合久久 | 免费国产成人午夜电影|