問(wèn)題描述:?? 在很久很久以前,有個(gè)農(nóng)夫叫小明(? ?_?)?式廷,他面前有條長(zhǎng)長(zhǎng)的小河咐扭,農(nóng)夫當(dāng)然是可以游過(guò)去的,但他還有一些小伙伴——一只狼(╬▔皿▔)凸滑废,一只羊≡[蝗肪。。]≡和一顆大白菜Ω蠕趁。于是上帝給了他一條小船薛闪。既然是小船,那么每次只能帶一個(gè)東西過(guò)河俺陋。那么問(wèn)題又來(lái)了——如果他帶大白菜過(guò)河豁延,那么失去農(nóng)夫保護(hù)的小羊羔會(huì)被狼吃掉。如果帶狼過(guò)河腊状,小羊羔又會(huì)啃掉白菜诱咏,于是困惑的小明向無(wú)所不能的程序員尋求了幫助——
問(wèn)題分析:
既然要安全的過(guò)河,就要先分析出怎樣才是安全的:狼和羊在一起時(shí)不安全缴挖,羊和白菜在一起時(shí)不安全袋狞。
接著,為了模擬物品過(guò)河,需要把物品分為兩種狀態(tài)苟鸯,比如1法焰、0,在這邊的為1倔毙,過(guò)河之后變?yōu)?埃仪。或者定義兩個(gè)棧陕赃,過(guò)河時(shí)將物品出棧到另一個(gè)棧里面卵蛉。
解決問(wèn)題:
1、
如果采用1么库、0狀態(tài)傻丝,就可以把問(wèn)題轉(zhuǎn)化為一個(gè)數(shù)學(xué)模型:每個(gè)物品都有1、0兩種狀態(tài)诉儒,共有四個(gè)物品葡缰,所以全部狀態(tài)就是2?=16種,接著把這些狀態(tài)中不安全的去掉忱反,接下來(lái)泛释,農(nóng)夫來(lái)回過(guò)河,所以每次的狀態(tài)必定是相反的温算,就可以進(jìn)行進(jìn)一步的篩選怜校。篩選到最后就是所有可行步驟的值了。再對(duì)這些值進(jìn)行分析注竿、排序茄茁、就可以得到結(jié)果:
(1)農(nóng)夫、狼巩割、羊裙顽、白菜開始都在左岸0000,農(nóng)夫拉羊從左岸到右岸1010宣谈,農(nóng)夫自己從右岸到左岸0010愈犹,農(nóng)夫拉著白菜從左岸到右岸1011,農(nóng)夫把羊從右岸拉回左岸0001蒲祈,農(nóng)夫拉著狼從左岸到右岸1101甘萧,農(nóng)夫自己從右岸到左岸0101,農(nóng)夫拉著羊從左岸到右岸1111梆掸。
(2)農(nóng)夫扬卷、狼、羊酸钦、白菜開始都在左岸0000怪得,農(nóng)夫拉羊從左岸到右岸1010,農(nóng)夫自己從右岸到左岸0010,農(nóng)夫拉著狼從左岸到右岸1110徒恋,農(nóng)夫把羊從右岸拉回左岸0100蚕断,農(nóng)夫拉著白菜從左岸到右岸1101,農(nóng)夫自己從右岸回到左岸0101入挣,農(nóng)夫拉著羊從左岸到右岸1111亿乳。
2、
用棧會(huì)比用數(shù)學(xué)模型運(yùn)行的時(shí)間更長(zhǎng)径筏,這就是數(shù)學(xué)學(xué)得好的強(qiáng)大之處吧葛假。
這個(gè)方法就是純粹一個(gè)一個(gè)試出來(lái)了。定義兩個(gè)棧:岸1和岸2滋恬,每次將岸1出棧到岸2中聊训,安全就接著從岸1出棧,不安全再嘗試從岸2帶回來(lái)一個(gè)是否安全(用岸的拷貝進(jìn)行嘗試)恢氯,也不安全就只能讓岸2再還給岸带斑。
當(dāng)然這樣會(huì)進(jìn)行很多嘗試,因此可能會(huì)出現(xiàn)重復(fù)勋拟,從而導(dǎo)致無(wú)限循環(huán)勋磕。比如先把羊帶過(guò)去,然后把白菜帶過(guò)去指黎,再把白菜帶回來(lái)朋凉,然后帶白菜過(guò)去,帶白菜回來(lái)醋安,帶白菜過(guò)去,帶白菜回來(lái)......墓毒,所以還需要一個(gè)歷史記錄吓揪,每次帶過(guò)去,查看歷史記錄中是否有重復(fù)的所计,重復(fù)就跳過(guò)柠辞。所以這樣多次的出棧入棧查重會(huì)花費(fèi)很多時(shí)間。不過(guò)這個(gè)比較仿真主胧,模擬了人的思考過(guò)程(安慰自己下叭首,,)
就這樣踪栋,一個(gè)一個(gè)試焙格,總會(huì)找到屬于農(nóng)夫的姿勢(shì)。
總結(jié):
農(nóng)夫過(guò)河問(wèn)題需要進(jìn)行大量的判斷和計(jì)算夷都。用代碼模擬人的思考判斷眷唉,通過(guò)判斷去掉那些不合格的操作,再對(duì)剩下的進(jìn)行篩選就會(huì)容易很多。將它轉(zhuǎn)換成數(shù)學(xué)模型是更好地方式冬阳,雖然不那么直觀也不容易想到蛤虐,但可以更快速的計(jì)算出結(jié)果。數(shù)學(xué)模型可以很好的避開重復(fù)結(jié)果肝陪、輸出出錯(cuò)驳庭、思維不周等很多問(wèn)題÷惹希總之學(xué)好數(shù)學(xué)還是很重要的嚷掠。