我有一个创建Object的代码。假设我们可以创建一个Object A,并且该对象具有R1或R2方向或对下一个Object的权限,我们将其命名为Object B,因此为了从对象A访问对象B R1或R2必须为1(或TRUE) )
如何实现一个检查对象A是否可以访问对象D的函数。 对于对象A,它需要至少具有对对象带的R1或R2访问权限,其中对象B需要具有对对象C的R1或R2访问权限,其中对象D需要至少具有对对象D的R1或R2访问权。 p>
<?php
class MyObject {
function directionsRn($R1, $R2, $objSource, $objDest) {
if ($R1 == 1) {
echo("$objSource can access $objDest via R1 <br>");
} else if ($R1 == 0) {
echo("SORRY, but $objSource CANNOT access $objDest via R1 <br>");
}
if ($R2 == 1) {
echo("$objSource can access $objDest via R2<br>");
} else if ($R2 == 0) {
echo("SORRY, but $objSource CANNOT access $objDest via R2 <br>");
}
}
}
$myObject_array[0] = new MyObject();
$myObject_array[1] = new MyObject();
$myObject_array[2] = new MyObject();
$myObject_array[0]->directionsRn(0, 1, 'A', 'B');
$myObject_array[1]->directionsRn(1, 0, 'D', 'B');
$myObject_array[2]->directionsRn(1, 0, 'C', 'D');
print_r($myObject_array);
答案 0 :(得分:1)
你拥有的是graph,你的对象是节点(A,B等),对象之间的权限是边。
任何两个节点之间的连接都可以使用bread first search来解决,您可以在其中尝试从已经访问了一个边缘的节点集中访问新节点。重要的一点是通过将已标记的元素标记为已经看到(使用布尔数组)
来忽略已经访问过的元素您还可以找到用于检查两个节点here
的连接的不同方法