前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ByteEdu教育平台--A*算法经典例子Go实现

ByteEdu教育平台--A*算法经典例子Go实现

作者头像
李海彬
发布2019-05-17 16:13:08
8380
发布2019-05-17 16:13:08
举报
文章被收录于专栏:Golang语言社区Golang语言社区

课程详情: OLLQ对战平台实战课程 预售开始


题目如下:

文章地址:http://www.byteedu.com/thread-763-1-1.html

A*算法--罗马尼亚度假问题问题表述

利用A*算法找到从A城市到B城市的最短路径,以及代价,其中A*算法中的h也就是从当前点到目标点的距离已经给出。

要求:

1. Go语言实现

2. 测试结果截个图

3. 支持原创


奖励:

1. 第一名回答的奖励:威望:5000 ,金币:50,书一本:深入浅出Prometheus(邮费中奖者承担,邮寄方式:到付)

2. 第二名回答的奖励:威望:5000 ,金币:50

3. 第三名回答的奖励:威望:5000 ,金币:30

注:

同时本片文章截稿后,会在Golang语言社区公众平台推送,文章形式原创,且打赏获得的酬劳归前三名所有,比例:50%,30%,20%


ByteEdu教育平台会员 :Tears 解答 如下

代码:

https://github.com/HuiguoRose/aStar/

效果:

部分代码:

代码语言:javascript
复制
 1package main
 2
 3import (
 4    "math/rand"
 5    "time"
 6)
 7
 8type PointMap struct {
 9    Size          int // 大小
10    Obstacle      int //障碍物
11    ObstaclePoint []*Point
12}
13
14func NewPointMap(size int) *PointMap {
15    //设置障碍物的数量为地图大小除以8
16    randomMap := &PointMap{Size: size, Obstacle: size / 8}
17    //调用GenerateObstacle生成随机障碍物;
18    randomMap.GenerateObstacle()
19    return randomMap
20}
21
22func (pm *PointMap) GenerateObstacle() {
23    pm.ObstaclePoint = append(pm.ObstaclePoint, NewPoint(pm.Size/2, pm.Size/2))
24    pm.ObstaclePoint = append(pm.ObstaclePoint, NewPoint(pm.Size/2, pm.Size/2-1))
25    //在地图的中间生成一个斜着的障碍物;
26    x := make([]int, 4)
27    for i := range x {
28        v := pm.Size/2 - 4 + i
29        pm.ObstaclePoint = append(pm.ObstaclePoint, NewPoint(v, pm.Size-v))
30        pm.ObstaclePoint = append(pm.ObstaclePoint, NewPoint(v, pm.Size-v-1))
31        pm.ObstaclePoint = append(pm.ObstaclePoint, NewPoint(pm.Size-v, v))
32        pm.ObstaclePoint = append(pm.ObstaclePoint, NewPoint(pm.Size-v, v-1))
33    }
34    //随机生成其他几个障碍物;
35    x = make([]int, pm.Obstacle-1)
36    for range x {
37        rand.Seed(time.Now().UnixNano())
38        x := rand.Intn(pm.Size)
39        y := rand.Intn(pm.Size)
40        pm.ObstaclePoint = append(pm.ObstaclePoint, NewPoint(x, y))
41        //障碍物的方向也是随机的;
42        xl := make([]int, pm.Size/4)
43        randNum := rand.Intn(100)
44        for l := range xl {
45            if randNum > 50 {
46                pm.ObstaclePoint = append(pm.ObstaclePoint, NewPoint(x, y+l))
47            } else {
48                pm.ObstaclePoint = append(pm.ObstaclePoint, NewPoint(x+l, y))
49            }
50        }
51    }
52}
53//定义一个方法来判断某个节点是否是障碍物
54func (pm *PointMap) IsObstacle(i, j int) bool {
55    for _, p := range pm.ObstaclePoint {
56        if i == p.X && j == p.Y {
57            return true
58        }
59    }
60    return false
61}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 课程详情: OLLQ对战平台实战课程 预售开始
相关产品与服务
Prometheus 监控服务
Prometheus 监控服务(TencentCloud Managed Service for Prometheus,TMP)是基于开源 Prometheus 构建的高可用、全托管的服务,与腾讯云容器服务(TKE)高度集成,兼容开源生态丰富多样的应用组件,结合腾讯云可观测平台-告警管理和 Prometheus Alertmanager 能力,为您提供免搭建的高效运维能力,减少开发及运维成本。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档