问题:给定一个非重复正整数数组,表示“n”个人的穿越时间。这n个人站在桥的一侧。Bridge 一次最多可容纳两个人。两人过桥时,必须以较慢者的步调走。找出所有人可以过桥的最短总时间。
我无法找到关于如何为“n”个人扩展它的模式。但不知何故,我设法找到了 4 个人的案子。有人可以帮我弄这个吗。我是 Golang 的新手,我被这个问题困住了。
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"sort"
"gopkg.in/yaml.v2"
)
type conf struct {
Person []map[string]float32 `yaml:"person"`
}
func (c *conf) getConf() *conf {
filename := os.Args[1] // Taking file input
yamlFile, err := ioutil.ReadFile(filename) // Yaml parse
if err != nil {
log.Printf("yamlFile.Get err #%v ", err)
}
err = yaml.Unmarshal(yamlFile, c)
if err != nil {
log.Fatalf("Unmarshal: %v", err)
}
return c
}
func main() {
var c conf // Object of struct conf
c.getConf() // calling getConf function
// Sorting the current conf map
n := map[float32][]string{} // Map to store current conf map
var a []float32 // Store values from conf map
for k, v := range c.Person {
v := float32(v)
fmt.Println(k, v)
n[v] = append(n[v], k)
}
for k := range n {
a = append(a, k)
}
// Converting float32 as float64 in order to sort the values in conf map
float32AsFloat64Values := make([]float64, len(a))
for i, val := range a {
float32AsFloat64Values[i] = float64(val)
}
sort.Float64s(float32AsFloat64Values)
for i, val := range float32AsFloat64Values {
a[i] = float32(val)
}
var time float32
fmt.Printf("\n%v\n", a)
for _, k := range a {
min1 := a[0]
min2 := a[1]
min3 := a[2]
游乐场:https://play.golang.org/p/ObTVA8gk0mg
Config.yaml 是:
person: person_1: 2 person_2: 1 person_3: 5 person_4: 8 person_5: 9
可以将其运行为:'go run main.go config.yaml'。我的情况是此 yaml 中可能有 4,5 或“n”个人。那么在给定约束的情况下,他们过桥的最短时间是多少。
萧十郎
慕勒3428872
相关分类