[推箱子11关怎么过]推箱子11关怎么过_迷失蔚蓝 推箱子第7关怎么推_耳机 过推
[推箱子11关怎么过]推箱子11关怎么过_迷失蔚蓝 推箱子第7关怎么推_耳机 过推,哪吒游戏网给大家带来详细的[推箱子11关怎么过]推箱子11关怎么过_迷失蔚蓝 推箱子第7关怎么推_耳机 过推介绍,大家可以阅读一下,希望这篇[推箱子11关怎么过]推箱子11关怎么过_迷失蔚蓝 推箱子第7关怎么推_耳机 过推可以给你带来参考价值。
第二部分
演算优化相当重要,通过第一部分我们已胜利完成推箱子演算的基本设计,获得不错的结果。从实际的演算情况来看,5个箱子及以下都能迅速获得结果,多的也就几分钟而已,不过6个箱子时情况发生了很大的变化,虽然相当部分还是能在数分钟戓数十分钟内求得结果,但个别情况耗时非常严重,如下图:
01111111110
11001001111
11421006001
10003060601
10001006001
11111160111
00001100011
00001100011
00000111110
求得结果耗时近23小时,而且还是在以下介绍的第1优化情况下获得的。相信不优化的话应该在60-70小时以上甚至更多。
1、优化一:添加死格
这个优化相当简单,不过效果非常明显,虽然并不是对所有地图有效。有的地图效果不明显,有的达2-3倍之多。
何谓死格?就是一些空的格子,人可以走进去推箱子11关怎么过,但箱子不能推进去,因为一旦推进去就无法再推出来,而这个格子又不是目标格,这样的话,推箱子无法再进行了,目标永远无法达成。死格设置值为5,用Space_Dead表示。下面这个方法就实现死格的自动设置:
privatevoid BuildDead(Map design)
{
char[]charSet;
intc;
for(inty = 1; y < Photo.Count - 1; y++)
{
charSet= Photo[y];
for(intx = 1; x < charSet.Length - 1; x++)
{
c= charSet[x];
if(c == SPACE)//是Space 时
{
if(design[x, y] < DESTI) //非目标格才可能是死格
{
if(charSet[x - 1] == WALL || charSet[x + 1] == WALL)//水平方向有Wall
{
if(this[x,y - 1] == WALL || this[x,y + 1] == WALL) //垂直方向有Wall
charSet[x]= (char)SPACE_DEAD;
}
}
}
}
}
}
2、优化二:快照分组
快照数量达数十万时速度迅速减慢,所以适当进行分组是加快求解的好方法。现成的方法是按人站立位置分组,对于10*10的地图,可分成100个组,当然不少位置人是到不了的,实际就是空组,这不影响分组只是浪费少量空间而已。同样的是上面的例子,分组后演算速度迅速提升推箱子11关怎么过,由原来的近23小时变成了76分钟,效果相当不错。
3、优化三:地图分组
地图分组得动动脑筋,因为没有现成的可用的指标。我们引入HashCode来实现。当然并不是用HashCode来标识唯一的地图,而是将不同的地图均匀的分配到不同的组中。考虑对每一格子分配一个值,非箱子所在位置可以忽视,约定箱子权重为1,非箱子权重为0。
HashCode=∑格子值*权重
因此地图HashCode,实际就等于箱子所在格子值之和。
格子值可以考虑依次赋予1、2、3、4、……,对于10*10地图而言,5个箱子时最大HashCode=100+99+98+97+96=490。因为值并不大,可以考虑采用一一对应关系来实现。最大HashCode:
public int MaxHashCode
{
get
{
int code =0;
for (int i = 0; i<BoxCount; i++)
code += (RowNum - 1) * ColNum + ColNum - i - 1;
return code;
}
}
从运行结果来看,这个优化效果不明显,从76分钟变成70分钟,仅提升8.9%。
4、优化四:加大快照分组进一步提升演算速度
优化三地图加入HashCode对提升演算速度效果不明显,不过地图加入HashCode后,快照分组可以考虑将地图也纳入进去。我们对地图分成2组、3组、4组等等分别演算,演算效果不断提升,最终确定分成组数:
组数=行数*列数*最大HashCode
以上例子演算耗时55250毫秒。
哇,地图从开始的23小时变成了不到1分钟完成。
总结:以上内容就是针对[推箱子11关怎么过]推箱子11关怎么过_迷失蔚蓝 推箱子第7关怎么推_耳机 过推详细阐释,如果您觉得有更好的建议可以提供给哪吒游戏网小编,[推箱子11关怎么过]推箱子11关怎么过_迷失蔚蓝 推箱子第7关怎么推_耳机 过推部分内容转载自互联网,有帮助可以收藏一下。