Как отобразить лабиринт в виде двумерного массива?

Допустим в текстовом файле в двумерной декартовой системе координат представлен простейший лабиринт в виде единиц (стены), нолей(комнаты) и двойки (финиш).Таким образом двойка находится по координатам (4,5)
1,1,1,2,1,1
1,0,0,0,0,1
1,0,1,1,0,1
1,0,0,1,0,1
1,1,1,1,1,1

Как преобразовать этот набор чисел в двумерный массив таким образом, чтобы каждое значение массива имело ключ как в декартовой системе координат? Тоесть, чтобы двойка находилась в array[4][5]

1 ответов


Я так понимаю, что индексация с 1 и отсчет снизу слева, то вот набросал на PHP (немного грязновато, но работает):


/*
допустим в файле labirint.data у нас в текстовом виде
1,1,1,2,1,1
1,0,0,0,0,1
1,0,1,1,0,1
1,0,0,1,0,1
1,1,1,1,1,1

*/

$data = file('labirint.data');
$c = count($data)-1;
$res = array();
for($i=$c; $i>=0; $i--){
  $tmp = explode(',', $data[$i]);
  foreach($tmp as $k=>$t){
    $res[$k+1][$c-$i+1] = $t;    
  }
}

var_dump($res[4][5]); // выведет 2
 

** Cпасибо, неплохохо поломал голову с правильным "набиванием" матрицы, что бы работала нужная вам индексация. Хорошая разминка :)

ну вам нужно считать текстовый файл и разобрать его формат.
Вообще конечно финиш находится по координатам 3,0 - так удобнее, но это конечно зависит от точки отсчета.

Ну мне проще написать код на php, так как вы не указали язык, то напишу на нем (с выделением памяти в С - небольшой гемор, ну а если юзать stl или что-то еще, то нормально)


$l = file_get_contents('lab');
$l = explode("\n", $l);
foreach($l as $k=>$v)
    $l[$k] = explode(',', $v);
 
Вот собственно и все.