спс, Понял нужно значение выводить так - работает:
echo"Сам элемент равен: ".$array_t[$x][$y];
Потому, что механизм парсинга переменных внутри строк упрощенный. Обрати внимание на раскраску:Вот тут не пойму почему я обращаюсь к $array_t[$x][$y] получаю не конкретное число "1", а массив Array[1]?
echo"Сам элемент равен: $array_t[$x][$y]<br />";
echo"Сам элемент равен: {$array_t[$x][$y]}<br />";
echo"Сам элемент равен: {$array_t[$x]}[{$y}]<br />";
function matrix($x, $y)
{
$array_t[$x][$y]=2;
if ($array_t[$x+1][$y]==0) matrix($x+1,$y);
if ($array_t[$x-1][$y]==0) matrix($x-1,$y);
if ($array_t[$x][$y+1]==0) matrix($x,$y+1);
if ($array_t[$x][$y-1]==0) matrix($x,$y-1);
};
Не нужно. То было для переменных внутри литералов (с такими вот "кавычечками"). Без кавычек и козе понятно, что $array_t[$x][$y] -- единая конструкция.и обрабатывать элемент тоже так нужно?
да, мне тоже так и не понимаю че они там считают,..Чем-то напомнило задачи по обработке изображений, когда нужно например контур выделить, там тоже окном 3x3 или меньше шаришься и почти аналогично заменяешь) ну если порог только один конечно.
думаешь так? не уверен, но мне казалась что проверки должны быть или по или против часовой стрелки *сверху слева снизу справа* и помним последнее направление если последнее направление было врава, пойск снизу начинается, если вниз то слева и тдMiksIr, вот код для прохода по одному блоку:
Напиши это же циклом.PHP:function matrix($x, $y) { $array_t[$x][$y]=2; if ($array_t[$x+1][$y]==0) matrix($x+1,$y); if ($array_t[$x-1][$y]==0) matrix($x-1,$y); if ($array_t[$x][$y+1]==0) matrix($x,$y+1); if ($array_t[$x][$y-1]==0) matrix($x,$y-1); };
00000
01110
01111
while(list($x,$y) = array_shift($buffer))
{
$array_t[$x][$y]=2;
if ($array_t[$x+1][$y]==0) $buffer[] = array($x+1,$y);
if ($array_t[$x-1][$y]==0) $buffer[] = array($x-1,$y);
if ($array_t[$x][$y+1]==0) $buffer[] = array($x,$y+1);
if ($array_t[$x][$y-1]==0) $buffer[] = array($x,$y-1);
};
Там значение точки заменяется с 0 на 2, так что замкнутые не должны проблем доставитьда, мне тоже так и не понимаю че они там считают,..
Игорь Z проблема может оказаться на много сложнее... фигуры бывают замкнутые. не попади в безвозратную рекурсию.. если есть желание подгляжу дома как я это решал...
тогда есть другая проблема, мы потеряем то что нашли и не сможем верниться обратноТам значение точки заменяется с 0 на 2, так что замкнутые не должны проблем доставить
11100
10101
10001
function matrix($x, $y)
{
$array_t[$x][$y]=3;
...
echo"<br />Элемент в конце функции:{$array_t[$x][$y]}<br/>";
};
....
....
if ($array_t[$x][$y]==1)
{
$blok_noley++;
matrix($x,$y);
echo"Элемент после (вне) функции:{$array_t[$x][$y]}<br/>";
}
Почему вне функции значение $array_t[$x][$y] не сохраняется (=3)?Элемент в конце функции:3
Элемент после (вне) функции:1
Ты "забыл" код для получения дополнительной сущности $buffer.Ну на, прям в твоем же стиле.
Птому что согласно правилам языка РНР это совершенно разные переменные, находящиеся в разных зонах видимости.обрабатываемый элемент вне функции не сохраняется или его как-то неверно зписываю?
Почему вне функции значение $array_t[$x][$y] не сохраняется (=3)?
А ты забыл, что твою "matrix($x, $y)" кто-то должен первый раз вызвать. Прикинь, да. У тебя это будет matrix($x, $y), у меня $buffer = array( array($x, $y) );Ты "забыл" код для получения дополнительной сущности $buffer.
function dfs ($y,$x,&$array)
{
if (!isset($array[$y][$x]) || $array[$y][$x]!=0) return;
$array[$y][$x] = 2;
dfs($y-1, $x, $array);
dfs($y+1, $x, $array);
dfs($y, $x-1, $array);
dfs($y, $x+1, $array);
}
/// тут где-то определен массив $array
$num_blocks = 0 ;
for ($y = 0 ; $y < count($array) ; $y++)
for ($x = 0 ; $x < count($array[$x]) ; $x++)
{
if ($array[$y][$x] == 0)
{
$num_blocks++;
dfs($y, $x, $array);
}
}
Задача выведенного яйца не стоит. Ты пока, извини конечно, но чушь несешь. Тут не нужна стратегия, тут есть давно известные алгоритмы, просто C. предлагает реализовать его рекурсией (dfs),тогда есть другая проблема, мы потеряем то что нашли и не сможем верниться обратно
обход идет сверху слева... найдя первый 0 путь делится на 2 направления... но мне подумать нужно... как я говорил тут толщина 1 и то что я сказал тоже не подходитКод:11100 10101 10001