簡體   English   中英

訂購多維數組

[英]Ordering multi-dimensional Array

我目前已經能夠成功地創建一個數獨代碼,該代碼可以基於一組隨機排列隨機地隨機交換列,該排列只能在排列的前3個數字中包含前3個數字,以保持棋盤的有效性。示例{3,2,1,4,5,6,7,8,9}有效,但{4,2,3,1,5,6,7,8,9}無效,但。 現在,我還必須找到一種交換堆棧的方法(每3列是一個堆棧),這似乎比交換列要難一些。

我在下面提供了我的列交換代碼,我想到了這樣一個想法:與其像在當前代碼中那樣,用隨機permutation1數組隨機排列1-9列,不如嘗試生成具有隨機數的隨機排列數組在1-9之間; 相反,我只想生成一個隨機數組,例如{1,2,3,7,8,9,4,5,6}或{7,8,9,4,5,6,1,2 ,3}。

有人可以告訴我一種方法,我可以隨機生成9個數字,但總是依次有1,2,3、4、5、6和7、8、9。 如果沒有人可以向我展示一種更有效的方法,那么我已經提出過建議?

更新的代碼:我更新的代碼似乎無法讀取我在每個if / else-if語句中定義的permutation1和permutation2數組。

#include <stdio.h>
#include <time.h>

int main(){
    int number, j, k;
    int p=0, q=0;
    int count=0;//initialize count
    int x, i;
    int m=0;
    int permutation1[9];
    int permutation2[3];

    int canonical[9]={1, 4, 7, 2, 5, 8, 3, 6, 9};
    int sudoku[9][9];

    srand(time(NULL));
    int randnum=rand()%6+1;

    if(randnum==1){
        permutation1[9]={1,2,3,4,5,6,7,8,9};
        permutation2[3]={1,2,3};
    }
    else if(randnum==2){
        permutation1[9]={1,2,3,7,8,9,4,5,6};
        permutation2[3]={1,3,2};
    }
    else if(randnum==3){
        permutation1[9]={4,5,6,1,2,3,7,8,9};
        permutation2[3]={2,1,3};
    }
    else if(randnum==4){
        permutation1[9]={4,5,6,7,8,9,1,2,3};
        permutation2[3]={2,3,1};
    }   
    else if(randnum==2){
        permutation1[9]={7,8,9,1,2,3,4,5,6};
        permutation2[3]={3,1,2};
    }
    else if(randnum==2){
        permutation1[9]={7,8,9,4,5,6,1,2,3};
        permutation2[3]={3,2,1};
    }

    for(k=1;k<10;k++){
        number=k;

        if(number == 1){
            for (j=0;j<9;j++)
                sudoku[(canonical[p]-1)][j] = number++;
            p++;
        }

        else {
            for (j=0;j<9;j++){
                sudoku[(canonical[p]-1)][j] = number++;
                if (number > 9)  {
                    number = number - 9;
                }
            }
            p++;
        }
    }

    for(i=0;i<9;i++){
        for (j=0;j<9;j++) {
            printf("%2d", sudoku[i][j]);
        }
        printf("\n");
    }

    printf("\nGiven the permutation: ");
    for(p=0;p<3;p++){
        printf("%2d", permutation2[p]);
    }
    printf("\n");

    for(q=0;q<9;q++){
        for(j=0;j<9;j++){
            printf("%2d",sudoku[q][permutation1[j]-1]);
        }
        printf("\n");
    }
    return 0;
}

有人可以告訴我一種方法,我可以隨機生成9個數字,但總是依次有1,2,3、4、5、6和7、8、9。

只有六個排列符合您的條件。 他們是:

1 2 3 4 5 6 7 8 9
1 2 3 7 8 9 4 5 6
4 5 6 1 2 3 7 8 9
4 5 6 7 8 9 1 2 3
7 8 9 1 2 3 4 5 6
7 8 9 4 5 6 1 2 3

因此,請選擇一個介於1到6之間的隨機數,並使用它來選擇所需的排列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM