介绍
之前做一个java的大作业,内容类似五子棋,相同颜色的球相连在一条直线上则可消除得分。
游戏开始时
随机在棋盘上出现三个小球,并在右侧栏预告当挪动一个小球将会出现的三个球。
游戏时
- 可挪动小球当且仅当小球当前位置和目的位置中存在一条路线,在此路线上没有其他小球即为空。
- 挪动一个小球,预告栏中的三个小球出现在棋盘随机位置上。
- 当五个相同颜色的小球在同一直线即可消除得分。
- 当鼠标点击一个小球时即为选中它,之后随着鼠标移动到不同位置,小球到该位置的路线的空格变暗(如果符合第一条),当点击这个位置(存在路线)时,小球沿此路线到达该位置。
错误
尝试用广度优先遍历路径时,程序运行崩掉。
原因
因为棋盘中,如果用广度搜索,必须要记录所有节点的信息,这个存储量一般电脑是达不到的。
措施
改为深度优先遍历。
深度优先遍历和广度优先遍历的区别和使用范围
以下转自http://blog.csdn.net/sweetgum2012/article/details/46739789
广度优先搜索
广度优先搜索是按照树的层次进行的搜索,如果此层没有搜索完成的情况下不会进行下一层的搜索。
深度优先搜索
深度优先搜索是按照树的深度进行搜索的,所以又叫纵向搜索,在每一层只扩展一个节点,直到为树的规定深度或叶子节点为止。这个便称为深度优先搜索。
适用范围
广度优先搜索适用范围:在未知树深度情况下,用这种算法很保险和安全。在树体系相对小不庞大的时候,广度优先也会更好些。
深度优先搜索适用范围:刚才说了深度优先搜索又自己的缺陷,但是并不代表深度优先搜索没有自己的价值。在树深度已知情况下,并且树体系相当庞大时,深度优先搜索往往会比广度优先搜索优秀,因为比如8*8的马踏棋盘中,如果用广度搜索,必须要记录所有节点的信息,这个存储量一般电脑是达不到的。然而如果用深度优先搜索的时候却能在一个棋盘被判定出来后释放之前的节点内存。
当让具体情况还是根据具体的实际问题而定,并没有哪种绝对的好。所以,理解这两种算法的本质是关键。