日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

本文介紹了Java中N×N矩陣的所有可能排列的處理方法,對大家解決問題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧!

問題描述

我希望使用遞歸生成矩陣的所有可能排列。
例如,2×2矩陣將有24種可能性。

1 2  1 2  1 3  1 4
3 4, 4 3, 2 4, 2 3....24 possibilities.

以下是我的代碼。邏輯看起來很好,但我只能得到四種不同的可能性。我希望有人能幫我解決這件事。

public class NewClass 
{
public static int LENGTH=2,count=0;

public static int check_if_array_is_fully_filled(int[][] a)
{
    for(int i=0;i<a.length;i++)
    {
        for(int j=0;j<a.length;j++)
        {
            if(a[i][j]==0)
            {
                return 0;
            }
        }
    }
    return 1;
}

public static int[][] initialize_all_zeros(int[][] a)
{
    for(int i=0;i<a.length;i++)
    {
        for(int j=0;j<a.length;j++)
        {
            a[i][j]=0;
        }
    }
    return a;
}
public static void display(int[][] a)
{
    for(int i=0;i<a.length;i++)
    {
        for(int j=0;j<a.length;j++)
        {
            System.out.print(a[i][j] + " ");
        }
        System.out.println();
    }
    System.out.println("********");
    count++;
}

public static void generate(int[][] a, int value_to_enter, int done)
{        
    if(done == 0)
    {
        for(int i=0;i<a.length;i++)
        {
            for(int j=0;j<a.length;j++)
            {
                if(a[i][j] == 0)
                {
                    a[i][j]=value_to_enter;
                    value_to_enter++;
                    int v = check_if_array_is_fully_filled(a);
                    if(v == 1)
                    {
                        done = 1;
                    }
                    else
                    {
                        generate(a,value_to_enter,0);
                    }                        
                }
            }
        }                        
    }
    if(done == 1)
    {
        display(a);
    }
}
public static void main(String[] agrs)
{
    int[][] a;
    for(int i=0;i<LENGTH;i++)
    {
        for(int j=0;j<LENGTH;j++)
        {
            a = new int[LENGTH][LENGTH];
            a = initialize_all_zeros(a);
            a[i][j]=1;
            generate(a,2,0);
        }
    }
    System.out.println(count);
}
}

推薦答案

我的偽方法是:

    將矩陣轉(zhuǎn)換為列表
    置換列表
    對于列表的每個(gè)排列,將列表轉(zhuǎn)換回矩陣。

您沒有提到矩陣中的所有元素是否都是唯一的。如果不是,則還需要從排列中刪除重復(fù)列表(需要在2之后、3之前進(jìn)行篩選。

置換列表:

    理解這一點(diǎn)的最簡單方法是通過遞歸。

基本步驟是當(dāng)您有兩個(gè)數(shù)字時(shí),排列很容易。它是(a,b)和(b,a)

要添加第三個(gè)元素,您需要將該元素添加到所有位置
例如置換(c,{(a,b),(b,a)})={(c,a,b),(a,c,b),(a,b,c),
(C,b,a),(b,c,a),(b,a,c)}

因此,您的遞歸將是置換的(a,permutedlist)

對于permutedlist中的每個(gè)b,將a添加到列表中的所有可能位置。

這篇關(guān)于Java中N×N矩陣的所有可能排列的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,

分享到:
標(biāo)簽:Java 排列 矩陣
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定