如何从10个可能的点生成三角形的所有可能性

时间:2013-06-07 23:17:31

标签: php algorithm

我正在考虑解决这个问题的方法:

生成10个点之间的三角形的所有可能性,其位置如下:

.   .   .

.   .   . 

.   .   .

    .

(就像普通手机上的键盘一样)
第一行:1 2 3
第二行:4 5 6
第三行:7 8 9
第四行:0

我正在使用PHP。我尝试使用oposite逻辑生成。 (获取所有组合并删除非三角形的所有组合,但这太复杂了)。有人有什么建议吗?

2 个答案:

答案 0 :(得分:2)

  1. 选择三分
  2. 测试它们是否可以形成三角形(只需测试它们是否在一行中)
  3. 记录
  4. 重复

答案 1 :(得分:2)

我想到了以下几点:

$banned = array(5,8,10);
$array = array();
for($i=1;$i<11;$i++){
    for($j=1;$j<11;$j++){
        for($k=1;$k<11;$k++){
            if($i != $j && $j != $k && $i != $k){
                $tmp = array($i, $j, $k);
                sort($tmp);
                if($tmp[1]-$tmp[0] !== $tmp[2]-$tmp[1] AND $tmp !== $banned){
                    $array[] = $tmp;
                }
            }
        }
    }
}
$array = array_map("unserialize", array_unique(array_map("serialize", $array)));// remove duplicates
print_r($array); // printing