Prolog 人工智能语言中文论坛---打造优质Prolog学习交流园地
Would you like to react to this message? Create an account in a few clicks or log in to continue.
Prolog 人工智能语言中文论坛---打造优质Prolog学习交流园地

一个供Prolog爱好者学习与交流的地方


您没有登录。 请登录注册

看图解题

2 posters

向下  留言 [第1页/共1页]

1看图解题 Empty 看图解题 周一 八月 19, 2013 8:40 am

white16819



如下图:

A侧:                         B侧

甲  4         7           8  目的地1
          4          2
乙  6         2           7  目的地2
          6          4
丙  8         5           8  目的地3


甲乙丙从A侧走到B侧,图上数字代表途经的路线,只能右上或右下移动,且只能移动到相邻数字.
甲乙丙到达目的地不限,但是3人都必须到达且目的地不能重复.
途经的路线上数字将被此人带走,第2人如果途经相同路径,将不能获得数字.
如:甲路线为44727,将获得24.此时乙走过相同路线,如64728,只能获得14.

最后要求3人到达目的地后获得数字相同.

望高手附上思路指教.

2看图解题 Empty 回复: 看图解题 周六 八月 31, 2013 2:48 pm

yauhsien



这首先当然做一些graph的功课。最少用edge/2定义路径,有数字的路径都打上代号:
代码:
edge(a/4, b/4).
edge(b/4, c/7).
...
然後可以写path/2寻找任何出发点到任何终点的路线。

另外要考量甲乙丙三人的顺序。甲可能比乙早走,或者乙比甲早走。这用排列就可以做。
最後考虑到路径数字相加的需要,就该参考谁先走同一路径的信息。
所以,可以给甲乙丙三人各一个数字,代表各人的动作顺序:
代码:
'甲'/1
'乙'/2
'丙'/3
当任何一人使用path/2获得一条路线时,个人的数字要加进路线中,代表走过任何路径的动作顺序。而因为各人的动作顺序是一个参元,也许path/2要升级为path/3:
代码:
:- path('甲'/1, a, k).
[[1,a], [1,b], [1,f], [1,h], [1,k]].
但是,每一条路线的长度不同,所以,谁走过什麽路径的信息抄在一张表里,比较便利统计。这也就是一般所说的dynamic programming了。

http://yauhsien.wordpress.com

返回页首  留言 [第1页/共1页]

您在这个论坛的权限:
不能在这个论坛回复主题