Как отобразить лабиринт в виде двумерного массива?
Допустим в текстовом файле в двумерной декартовой системе координат представлен простейший лабиринт в виде единиц (стены), нолей(комнаты) и двойки (финиш).Таким образом двойка находится по координатам (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,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);
Вот собственно и все.