好的,我有一个由链接节点矩阵组成的数据结构,比方说10x10。我希望能够任意选择这些节点中的任何一个,并且 - 从那里 - 按照扩展同心正方形的模式处理许多周围节点(为了便于说明,我在下面使用较少的节点)。至于具体细节,实现将在Actionscript中 - 但可以用另一种语言回答:) - 这是一个扫雷游戏(特别是这个功能,如果点击一块无雷方块,它们 - 所有 - 无论形状如何,都能清除,直到周围的地雷。它也将基于事件 - 为每个遍历的节点调度一个,所以我想象的方式是当迭代器或任何遇到包含矿的字段时,遍历将停止在该方向上继续前进而其余部分将继续。节点与它们的顶部,右侧,底部和左侧邻居有双重链接,如果有必要,我不会反对添加更多链接。可能还有其他一些方法可以做到这一点,但是我可以想到这种解决方案的一些用途,并希望将它包含在我正在创建的框架中,所以我想带走一些我可以重用的东西
首先:
0 0 0 0 0
0 0 0 0 0
0 0 X 0 0
0 0 0 0 0
0 0 0 0 0
第二:
0 0 0 0 0
0 X X X 0
0 X 0 X 0
0 X X X 0
0 0 0 0 0
答案 0 :(得分:0)
function scan( x, y ){
queue toDo;
set queued;
toDo.push( x, y );
queued.add( x, y );
while ( !toDo.empty() ) {
(x, y) = toDo.removeHead();
if ( process( x, y ) != stop ) {
for( xp = -1; xp <= 1; ++xp ) {
for( yp = -1; yp <= 1; ++yp ) {
if ( !queued.contains( x+xp, y+yp ) ) {
toDo.push( x+xp, y+yp );
queued.add( x+xp, y+yp );
}
}
}
}
}
}