學習需要,結合模型實現了商人過河問題。
包括:n商人n隨從 m小船問題
人,貓,雞,公尺過河問題
目前使用暴力演算法,後期打算寫下dijstra演算法求解(畢竟暴力演算法無法證明無解性)
s允許狀態集合
d允許決策集合n對商人隨從過河
const n = 3
// 遍歷演算法
// 輸入 商人 隨從人數 n = 3,4,5...
// 輸出 每一步的 決策
func
nextstep
(x, y, stepcount int, printcontent string)
// 決策集合
for _, decision := range [2]int, , , , }
nextstep(nextx, nexty, stepcount+1, nextprintcontent)
} }}// 做決策
func
decide
(x, y, decisionone, decisiontwo, stepcount int)
(int, int)
else
}// 檢視現在的狀態是否符合 s 允許狀態集合
func
checkins
(x, y int)
bool
if x == y
for j := 0; j <= n; j++
} for j := 0; j <= n; j++
} return
false
}複製**
人貓雞公尺過河同上面演算法類似,只是增加了變元
func
nextstep
(a, b, c, d, stepcount int, printcontent string)
for _, decision := range [4]int, , , }
nextstep(nexta, nextb, nextc, nextd, stepcount+1, nextprintcontent)
} }}func
decide
(a, b, c, d, decideone, decidetwo, decidethree, decidefour, stepcount int)
(int, int, int, int)
return a + decideone, b + decidetwo, c + decidethree, d + decidefour
}func
checkins
(a, b, c, d int)
bool
return
true
} if a == 1
return
true
} return
true
} return
false
}複製**
A 演算法實現獵人渡河問題
加粗樣式在這裡插入 片 問題描述 獵人 狗 男人帶著男孩1 男孩2,女人帶著女孩1 女孩2,一共8個體。一艘小船,一次只能過兩個個體,狗和四個小孩不會划船。注意 1 獵人不在,狗咬任何人 2 男人不在,女人打男孩 3 女人不在,男人打女孩 如下 思路 用0表示在此岸,1表示在對岸 0,0,0,0,0...
最大子陣列問題 GoLang實現
在乙個陣列a中尋找乙個最大的子陣列,這個問題可以用分治策略來求解。首先需要劃分問題,最大的子陣列只有如下3中情況 情況1 最大子串行出現在a low a mid 情況2 最大子串行出現在a mid 1 a high 情況3 最大子串行包含a mid a mid 1 那麼,問題的計算就可以分為對兩個小...
演算法基礎 整數拆分問題(Golang實現)
乙個整數總能夠拆分為2的冪的和。比如 7 1 2 4 7 1 2 2 2 7 1 1 1 4 7 1 1 1 2 2 7 1 1 1 1 1 2 7 1 1 1 1 1 1 1 總共同擁有6種不同的拆分方式。再比方 4能夠拆分成 4 4,4 1 1 1 1,4 2 2,4 1 1 2。用f n 表示...