鱼C论坛

 找回密码
 立即注册
查看: 4293|回复: 25

[已解决]两只奶牛

[复制链接]
发表于 2022-6-25 21:46:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 傻眼貓咪 于 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 不相同,所以可以判断这种状况的路线之前没有走过。

这题的题解:有关权值知识。在数学领域,权值指加权平均数中的每个数的频数,也称为权数或权重。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-6-26 13:45:30 | 显示全部楼层
柿子饼同学 发表于 2022-6-26 13:40
就是一个状态有三个值 : 坐标 x , 坐标 y , 朝向
这里给每个坐标, 朝向乘以不同的数 , 便于区分不同状 ...

没错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-26 13:53:20 | 显示全部楼层
柿子饼同学 发表于 2022-6-26 13:50
哦哦哦就是每个状态相当于有一个唯一的 "码"
这样不用开结构体了

是啊,很多大佬都是用这种方法的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-26 16:52:27 | 显示全部楼层
想入门的新人 发表于 2022-6-26 14:51
上面还考虑了方向,这里不用考虑方向吗? 我认为上面应该只需要考虑牛的方向,因为人的方向和牛一样


我举的例子只是为了让人明白当中道理/思路

学习是为了明白,而不是为了抄袭
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-23 04:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表