需要在扩展同心正方形中遍历矩阵图

时间:2010-03-05 19:57:37

标签: c++ actionscript graph data-structures tree

好的,我有一个由链接节点矩阵组成的数据结构,比方说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
 

第三:
X X X X X
X 0 0 0 X
X 0 0 0 X
X 0 0 0 X
X X X X X
 

1 个答案:

答案 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 );
                    }
                }
            }
        }
    }
}