<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)載請注明出處.
    主站蜘蛛池模板: 国产免费看JIZZ视频| a毛看片免费观看视频| 成人特黄a级毛片免费视频| 内射干少妇亚洲69XXX| 久久久久成人精品免费播放动漫| 亚洲午夜福利精品久久| 亚欧国产一级在线免费| 亚洲无线码一区二区三区| a毛片久久免费观看| 亚洲视频在线一区| 免费福利网站在线观看| 在线观看亚洲AV日韩AV| 国产高清免费观看| 一出一进一爽一粗一大视频免费的| 婷婷亚洲天堂影院| 三根一起会坏掉的好痛免费三级全黄的视频在线观看 | 亚洲尤码不卡AV麻豆| 国产成人无码区免费网站| 亚洲精品在线观看视频| 在线视频观看免费视频18| 亚洲AV无码专区亚洲AV桃| 亚洲中文字幕视频国产| 久久国产精品免费观看| 亚洲激情视频图片| 免费成人午夜视频| 久久九九AV免费精品| 亚洲中文字幕一区精品自拍| 国产三级免费观看| 日韩免费的视频在线观看香蕉| 亚洲一卡2卡4卡5卡6卡在线99| 国产成人精品免费视频大全五级 | 狠狠亚洲狠狠欧洲2019| 午夜无码A级毛片免费视频| 亚洲一级毛片在线观| 免费人妻无码不卡中文字幕18禁| 中国一级特黄的片子免费| 亚洲国产精品日韩在线观看| 免费在线观看亚洲| 5g影院5g天天爽永久免费影院| 美女被艹免费视频| 亚洲理论片在线观看|