冥思苦想了一天也没想出来,求诸位大神给个代码思路!

2013-01-17 01:05:04 +08:00
 nichan
假设,现在有7颗种子,依次编号为1到7。

将它们全部种下去后,3号种子结了5颗新种子,7号种子结了2颗新种子,其他种子均未结种。

分别将3号种子结出的5颗新种子命名为31,32,33,34,35。7号种子结出的2颗新种子命名为71,72(即先代的种子id加上本代的种子id)。

又分别将31,32,33,34,35和71,72种下去,其中31结出了3颗新种子,分别命名为311,312,313。

最后将统计到这样一个数组
{1,2,3,31,311,312,313,32,33,34,35,4,5,6,7,71,72}

其中,每一代的哪一颗种子是否结种,结多少种与概率无关,均为事先指定好,也就是说在我种下第一批种子之前,改批种子一共能够产生多少后代,哪颗种子能够产生后代已经被提前确定了(只是我还需要“种”这个“函数”才能得知结果)

现已知有N颗种子,如何写循环才能够得到上述形式的数组?(假设“种”函数会返回一个包含子代id的数组)

万分感谢!!!
3306 次点击
所在节点    问与答
13 条回复
CoX
2013-01-17 01:10:56 +08:00
嵌套调用呗,跟遍历文件夹下的文件一个思路吧
alexrezit
2013-01-17 01:16:47 +08:00
Recursion...
alexrezit
2013-01-17 01:24:02 +08:00
@alexrezit
如果你不在意性能的话...
txx
2013-01-17 02:07:24 +08:00
dfs bfs 都可以

我更喜欢bfs一些
endyul
2013-01-17 12:27:37 +08:00
用“种”函数构造个树再先根遍历一下
Hua
2013-01-17 14:07:51 +08:00
@txx +1
013231
2013-01-17 14:13:09 +08:00
@txx 如果是形成樓主給出的那種數組應該用DFS啦.
txx
2013-01-17 16:32:54 +08:00
@013231 bfs 加一个 字符串的sort 也可以嘛。。。 虽说dfs更短小简洁一些...
Sunyanzi
2013-01-17 17:02:55 +08:00
<?php
// Sunyanzi @V2EX

/* make a flowerpot ... */
$flowerpot = [];

/* we have 7 seeds at first ... */
seeding_time( $flowerpot, 0, 7 );

/* simple output ... */
echo( implode( ' ', $flowerpot ) );

/* main function ... using Recursion which is @alexrezit's favourite ... */
function seeding_time( &$ret, $prefix, $number ) {

/* the seeds we planted can sprouted ... */
static $seeds = [
3 => 5,
7 => 2,
31 => 3
];

/* seeding in progress ... */
for ( $i = 1; $i <= $number; ++ $i ) {

/* most easy way to get seed number ... */
$s = intval( $prefix . $i );

/* push into result ... */
$ret[] = $s;

/* we have magic on this seed ..? */
if ( isset( $seeds[$s] ) )
seeding_time( $ret, $s, $seeds[$s] );

}

/* we have done ... */
return;

}


// --------------------------------------------------
// DEMO OUTPUT
// --------------------------------------------------
// 1 2 3 31 311 312 313 32 33 34 35 4 5 6 7 71 72
// --------------------------------------------------
Sunyanzi
2013-01-17 17:06:04 +08:00
花了大概五分钟顺手一写效率没优化 ...

说来 ... 看到自己的代码变成这样黑乎乎的一陀还真不是个好受的事情啊 ...
leohxj
2013-01-17 22:29:00 +08:00
@Sunyanzi 用Gist
Sunyanzi
2013-01-18 10:27:35 +08:00
@leohxj 用 Gist 的话这个帖子加载的时候会卡住卡半天 ...

体验不好的说 ...
nichan
2013-01-20 23:05:54 +08:00
非常感谢各位。。。最后还是用了递归解决问题。。。
果然之前学到的还是都还给老师了吧。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/57838

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX