[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Поиск элементов в матрице
Страницы: 1, 2
mattxs
Доброй ночи. Имеется функция

function is_existELEM($X)
{
$K = array();
for ($q=0; $q < count($X); $q++) {
for ($z=0; $z < count($X[0]); $z++) {
$K[$q][$z] = -1;
}
}


$s = false;
$t = false;

for ($i=0; $i < count($X); $i++) {
for ($j=0; $j < count($X[0]); $j++) {
if($X[$i][$j]==-1) continue;
else
{
$k=$i;
$l=$j;
// do{
for ($k=0; $k < count($X[0]); $k++) {
if($X[$i][$k] != -1) $s = true;
else $s = false;
}
// $f++;
// } while($f<count($X[0]));

// do{

for ($l=0; $l < count($X); $l++) {
if($X[$l][$j] != -1) $t = true;
else $t = false;
}
// $d++;
// } while($d<count($X));



if($s && $t) $K[$i][$j] = $X[$i][$j];
else $X[$i][$j]=-1;
printmatrix($X);
echo "<br><br>";
}
}
}

return $K;
}


Но работает она не совсем правильно.
Подскажите,пожалуйста. У меня есть двумерный массив:

$X = array(
array(90,-1,20),
array(-1,300,100),
array(50,-1,60)
);


Необходимо пройти по матрице пропуская -1 и для каждого элемента (не равного -1) проверить, есть ли ещё элементы в строке и столбце не равные -1. Если есть, то записать элемент (для которого искали) в дв. массив $K. Иначе приравнять этот элемент (для которого искали) к -1, то есть $X[$i][$j]=-1 и перейти к следующему элементу.
Например если матрица $X такая:

$X = array(
array(90,-1,20),
array(-1,300,100),
array(50,-1,60)
);


то первый элемент на пути (не равный -1) будет 90. Для 90 надо проверить, есть ли на этой строке хоть один элемент не равный -1 И так же на столбце, где стоит 90. В нашем случае, на строке стоит 20, на столбце 50, следовательно, запоминаем 90 (с теми же индексами) в массив $K, то есть $K[$i][$j]=$X[$i][$j] и переходим к следующему элементу. Следующий элемент 20 (для него на строке стоит 90, на столбце 100 и 60), следовательно запоминаем. Далее 300, на строке 100, а на столбце нету элемента неравного -1, следовательно присваиваем 300 значение -1, то есть $X[$i][$j]=-1; Далее 100, на столбце 20 и 60, а на строке НЕТ элементов,так как 300 уже стал -1 на предыдущем шаге цикла. И тд. На выходе должен получиться массив $K вида

$X = array(
array(90,-1,20),
array(-1,-1,-1),
array(50,-1,60)
);


Проблема в том, что не могу понять, как двинуть цикл назад, если, например, мы на элементе 20 в $X как понять, что для него на строке есть 90. Или на элементе 60, как понять, что для 60 на строке есть 50, а на столбце 20.
Буду рад любой помощи! Спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.