【发布时间】:2014-05-08 22:20:44
【问题描述】:
我目前已经能够成功制作一个数独代码,该代码根据一组随机排列随机交换列,排列只能在排列的前 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;
}
【问题讨论】:
-
不要删除你的问题 Titan。
标签: c random multidimensional-array