⑴ 扫雷点到空格时的算法 跪求
从手工点开的这个空格进行处理,按上右下左或你自己定义的一个顺序来判断相应位置的格式是否是空格且未被点开,如果不是,则跳过,如果是,则将其自动点开,同时把这几个位置加入队列后续处理。
简单的流程图示意:
当前位置是空白位置?----否--->非空白的处理
|
|是
|
V
加入队列
|
V
+--->队列为空?-------->是--->结束
||
||否
||
|V
|第一个元素出队
||
|V
|点开该元素所指的位置
||
|V
|上左下右的位置如果是空白且未点开则入队
||
--------+
上面是非递归的方案,递归方案则更容易了:
伪代码算法描述如下:
Click(pos)//点开pos这个位置
{
//IsClicked()判断是否是已经点开的格子
if(IsClicked(pos))
return;
//IsBlank()判断是否是空白格子
if(!IsBlank(pos))
{
点开非空白格子的处理
}
//下面是点开空白格子的处理
ClickBlank(pos);
}
ClickBlank(pos)
{
if(!IsBlank(pos))
rerurn;
if(IsClicked(pos))
return;
//下面对四个方向的格子进行自动点开
//你需要计算四向的格子位置,无效的直接返回
ClickBlank(pos上面的格子);
ClickBlank(pos右面的格子);
ClickBlank(pos下面的格子);
ClickBlank(pos左面的格子);
}