golang實現商人渡河問題 暴力解法

2021-09-24 08:10:48 字數 1568 閱讀 4018

學習需要,結合模型實現了商人過河問題。

包括: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 表示...