我目前已經能夠成功地做出隨機交換列的隨機交換列的隨機置換的代碼,排列只能有排列的前3個數字中的前3個數字爲了保持董事會的有效性,例如{3,2,1,4,5,6,7,8,9}有效,但{4,2,3,1,5,6,7,8,9}不是,但是。現在我必須找到一種交換堆棧的方法(每3列是堆棧),這似乎比將列交換給我更困難。排序多維數組
我已經提供了我的列交換代碼如下,我想到了這個想法,而不是隨機排列列1-9與隨機permutation1數組,如我在當前的代碼中做的,我應該嘗試生成隨機排列然而,在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;
}
不要刪除你的問題泰坦。 – pmg