回帖精选:游戏常用算法问题——小明过桥问题

Posted Golang语言社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了回帖精选:游戏常用算法问题——小明过桥问题相关的知识,希望对你有一定的参考价值。




回帖精选:游戏常用算法问题——小明过桥问题


小明家必须要过一座桥。小明过桥最快要1秒,小明的弟弟最快要3秒,小明的爸爸最快要6秒,小明的妈妈最快要8秒,小明的爷爷最快要12秒。每次此桥最多可过两人,而过桥的速度依过桥最慢者而定。过桥时候是黑夜,所以必须有手电筒,小明家只有一个手电筒,而且手电筒的电池只剩30秒就将耗尽。小明一家该如何过桥,请写出详细过程。


要求:go语言实现,并带测试代码及结果




laojke


 1package main
2
3import "fmt"
4
5func main() {
6
7        m := make(map[string]int)
8
9        m["小明"] = 1
10        m["小明弟弟"] = 3
11        m["小明爷爷"] = 12
12        m["小明爸爸"] = 6
13        m["小明妈妈"] = 8
14
15        sortMap(m)
16}
17
18//排序
19func sortMap(mp map[string]int) {
20
21        var newMp = make([]int0)
22        var newMpKey = make([]string0)
23
24        for k, v := range mp {
25                newMp = append(newMp, v)
26                newMpKey = append(newMpKey, k)
27        }
28
29        lens := len(newMp)
30        for i := 0; i < lens; i++ {
31                for j := i + 1; j < lens; j++ {
32                        if newMp[i] > newMp[j] {
33                                temp := newMp[i]
34                                newMp[i] = newMp[j]
35                                newMp[j] = temp
36
37                                temp2 := newMpKey[i]
38                                newMpKey[i] = newMpKey[j]
39                                newMpKey[j] = temp2
40                        }
41                }
42        }
43
44        for i := 0; i < len(newMpKey); i++ {
45                fmt.Println(newMpKey[i], newMp[i])
46        }
47
48        fmt.Println("================排序完成,开始送人====================")
49
50        /*
51                1、先把1号和2号送过去,
52                2、1号回来
53                3、然后把时间最长4、5位的送过去,
54                4、2号回来
55                5、1号和2号过去,
56                6、1号回来
57                7、1号和3号过去
58        */

59
60        total(newMp, newMpKey)
61
62}
63
64func total(valueSlice []int, keySlice []string) {
65        var sum int = 0
66        var lens int = len(valueSlice)
67
68        //1、先把1号和2号送过去,
69        sum += valueSlice[1]
70        fmt.Printf("%s送%s(%d)总耗时%d ", keySlice[0], keySlice[1], valueSlice[1], sum)
71
72        //把1号送回
73        sum += valueSlice[0]
74        fmt.Printf("%s(%d)回总耗时%d ", keySlice[0], valueSlice[0], sum)
75
76        //2、把时间最长4、5位的送过去,
77        sum += valueSlice[lens-1]
78        fmt.Printf("%s送%s(%d)过去总耗时%d ", keySlice[lens-2], keySlice[lens-1], valueSlice[lens-1], sum)
79        //3、把2号送回去
80        sum += valueSlice[1]
81        fmt.Printf("%s(%d)回去总耗时%d ", keySlice[1], valueSlice[1], sum)
82
83        //var zuida int = 0
84
85        //然后1号把剩余的都送过去
86
87        for j := 1; j < lens-2; j++ {
88                sum += valueSlice[j]
89                fmt.Printf("%s把%s(%d)送过去总耗时%d ", keySlice[0], keySlice[j], valueSlice[j], sum)
90
91                if j == lens-3 {
92
93                        break
94                }
95                sum += valueSlice[0]
96                fmt.Printf("小明(%d)回总耗时%d ", valueSlice[0], sum)
97        }
98
99        fmt.Println("送完了总耗时", sum)
100
101}
102
103
104网上搜索搜索资料,终于搞好了 ,


测试结果
小明 1
小明弟弟 3
小明爸爸 6
小明妈妈 8
小明爷爷 12
================排序完成,开始送人====================
小明送小明弟弟(3)总耗时3
小明(1)回总耗时4
小明妈妈送小明爷爷(12)过去总耗时16
小明弟弟(3)回去总耗时19
小明把小明弟弟(3)送过去总耗时22
小明(1)回总耗时23
小明把小明爸爸(6)送过去总耗时29
送完了总耗时 29


点击下方“阅读原文”直接跳转原贴围观,欢迎大家来讨(灌)论(水)!


如果觉得此贴对你有启发的话,请给作者来一波点赞、转发、评论和赞赏支持他持续产出吧!


 


版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。



Golang语言社区

ID:Golangweb

Golang标准文库

游戏服务器架构丨分布式技术丨大数据丨游戏算法学习

ByteEdu教育平台——提供海量Go课程

   (www. ByteEdu.Com)




以上是关于回帖精选:游戏常用算法问题——小明过桥问题的主要内容,如果未能解决你的问题,请参考以下文章

过桥问题,求最短时间

经典算法一 --- 过桥问题

java之基础算法精选

夜过吊桥算法

过河问题(贪心算法)

贪心算法——过河问题