原题:3只羊和3只狮子过河,有1艘船只能容纳2只动物,当河岸上狮子数大于羊数,羊就会被吃掉,找到运输方法,让所有动物都过河。
类似推广:野人传教士过河;羊狼过河;有些问题描述时会加一个农夫(渡船人),但农夫往往不是影响因素。
思路:看到类似问题,想到状态搜索,搜索方式一般有两种:DFS和BFS,其都是对所有状态的一种搜索,直到搜索到目标状态
定义状态: 1)题目意思是,原来岸边有3狮3羊,最后要安全渡河,变成0狮0羊,那么状态必有狮子数和羊数; 2)什么导致状态发生变化,是用船运送,那船在此岸还是彼岸?一开始船肯定在此岸,最后运输完成后,船必然是在彼岸,故船在哪个岸应该也要作为状态; 于是,定义状态state:
state = (m, n, k)m: 羊数,0