помогите генерировать массив

Статус
В этой теме нельзя размещать новые ответы.

bobo85

Постоялец
Регистрация
29 Окт 2006
Сообщения
124
Реакции
2
Вот ломаю голову над одним вопросом. Может кто поможет.
итак нужно создать или генерировать 2хмерный массив .значит массив должен иметь такой вид
значит нужно чтоб массив состоял из 10массивов , назовем их подмассивами.
подмассивы должны состоять из номеров 0-9. причем номер не может 2жды повторятья. это первое условие.

Код:
$igra[]=array(0,1,2,3,4,5,6,7,8,9);
$igra[]=array(6,0,1,5,9,2,7,3,4,8);
$igra[]=array(2,......................
$igra[]=array(1,......................
$igra[]=array(5,
$igra[]=array(4,
$igra[]=array(9,
$igra[]=array(8,
$igra[]=array(7,
$igra[]=array(3,

где  
$igra[x][z]!=$igra[y][z]   (x={0,9},y={0,9});
то есть такая квадратная матрица где каждый столбик состоит из 0-9 цифр в котором никогда нет одной из этих цифр 2 раза, ио каждая строка тоже....
причем хочется не ограничиватсья на 10ти...


не подскажите код который сгенерирует такую табличку рандомно?
 
Как то вот так. Рабочесть не проверял, писал в блокноте по быстрому.
PHP:
$size=10;

$numbers=array();
//заполняем массив чисед
for($i=0;$i<$size;$i++){
	$numbers[]=$i;
}

//строим матрицу из всех возможных комбинаций с учетом уникальнсоти по столбику и строке
$igra=array();
for($i=0;$i<$size;$i++){
	$igra[]=$numbers;
	//сдвигаем массив циклично на 1 элемент
	array_unshift($numbers, array_pop($numbers));
}

//перемешиваем получившуюся матрицу
shuffle($igra);
 
:D как вариант случайной выборки и инвертированной матрицы-
PHP:
$size =10;
for($n=0; $n<$size; ++$n){    
    $number_arrs[] = $n;

}
for($flag=0, $iteration=0; !$flag ; ++$iteration){//&& $iteration<100
$flag =1;
$matrix = array();
$matrix_inv = array();
$i=0;

for($y=0; $y<$size; ++$y){
    
$number_arr = $number_arrs;
shuffle($number_arr);


    for($x=0; $x<$size; ++$x){
    
 
        $random_n=false;
        foreach($number_arr as $n_is=>$r){
            if(@in_array($r, @$matrix_inv[$x] )   ){
                continue;
            }
            $random_n = $r;
            unset($number_arr[$n_is]);
            break;
        }
             if($random_n===false){
                $flag =0;
                break 2;
            }    
   
           $matrix_inv[$x][$y]=$random_n;
            $matrix[$y][$x]=$random_n;         

    }
} 
}

echo "Попыток $iteration<br>";
foreach($matrix as $y=>$str){
    foreach($str as $x=>$num){
        echo "| $num | ";
    
    }
      echo "<br>";
}
Массив заполняется построчно случайными значениями, при возникновении ошибки всё начинается сначала). При небольших размерах матрицы заполняется быстро. При больших размерах- количество невозможных ситуаций увеличивается оч значительно и больше 10 ставить не рекомендуется.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху