本帖最后由 傻眼貓咪 于 2022-6-25 21:52 编辑
以迷宫为例子,找出从起点到终点的路线,为了预防无限循环路线,必须另外储存每次经过的路线,比如:创建另一个数组存储经过的路线,经过则 1 否则为 0,这样就不会重复路线了。
**以上只有一个未知路线,所以只需一个数组便可存入经过的路线。
同理,这题是牛和人的路线(有两条),假设人的路线为 A -> B -> C -> A,这里发现重复了 A 点,如果是用上述的方法,肯定就在这里结束代码吧?但是这样不够,因为虽然人的路线重复回去了 A 点,但牛可能已经和刚刚不同点了,比如:
人:A -> B -> C -> A
牛:B -> D -> E -> F
这里你会发现,人虽然回去 A 点(重复)但其结果不同,因为牛不是刚才那个地方,所以这次应该算不同的路线,这样问题来了,一共有多少种可能性呢?
所以用值替代:
比如 A 点,这里我就用 A(x, y) 代表它的位置,而人的坐标 x 以 1 为进制,y 以 10 为进制;牛 x 以 100 为进制,y 以 1000为进制,从上往下,从左往右,共 100 格。
例子:
假设 A 点为 (0, 0)、 B 点为 (0, 1)、 C 点为 (1, 1)、 D 点为 (1, 0)
人:A -> B -> C -> A
牛:C -> D -> A -> D
这时你会发现最后一步,人的路线重复了,但牛没有,代码如何实现(或知道有没有重复呢?)
人的起点值为 A(0, 0) 是 0*1 + 0*10 = 0 最后的 A 点一样是 0
牛的起点值为 C(1, 1) 是 1*100 + 1*1000 = 1100 最后的点是 D(1, 0) 值是 1*100 + 0*1000 = 100
起点值:0 + 1100 = 1100
最后的点值:0 + 100 = 100
1100 和 100 不相同,所以可以判断这种状况的路线之前没有走过。
这题的题解:有关权值知识。在数学领域,权值指加权平均数中的每个数的频数,也称为权数或权重。