從零開始學golang之Dijkstra
package main
import (
"fmt"
)
const MAX_SIZE int = 5
const MAX_VALUE int = 9999
func main() {
fmt.Println("Dijkstra")
var gg Graph
var vexs = []string{"A", "B", "C", "D", "E"}
gg.vexnum = 5
gg.vexs = vexs
initGG(&gg, vexs)
PrintG(gg, 5)
Dijkstra(&gg, 1)
}
type Graph struct {
vexs []string //定點集合
vexnum int //定點數量
edgnum int //邊數量
matrix [MAX_SIZE][MAX_SIZE]int //鄰接矩陣
}
type Edge struct {
start string
end string
weight int
}
func Dijkstra(gg *Graph, start int) {
var dist [MAX_SIZE]int //路勁長度陣列
var ss [MAX_SIZE]bool //最短路勁節點集合
//init
dist = gg.matrix[start]
ss[start] = true //find start to start
dist[start] = 0 //start to start length
for i := 0; i < gg.vexnum; i++ {
k := 0
min := MAX_VALUE
fmt.Println("-----------")
fmt.Println(dist, ss)
//find next 貪心
for j := 0; j < len(dist); j++ {
if ss[j] == false && dist[j] != MAX_VALUE && dist[j] < min {
min = dist[j]
k = j
}
}
//set find
ss[k] = true
//update dist length
for u := 0; u < gg.vexnum; u++ {
if gg.matrix[k][u] != MAX_VALUE && ss[u] == false {
weight := min + gg.matrix[k][u]
if weight < dist[u] {
dist[u] = weight
}
}
}
}
for i := 0; i < gg.vexnum; i++ {
fmt.Printf("shortest %s->%s = %d\n", gg.vexs[start], gg.vexs[i], dist[i])
}
}
func initGG(gg *Graph, vexs []string) {
for i := 0; i < len(vexs); i++ {
for j := 0; j < len(vexs); j++ {
gg.matrix[i][j] = MAX_VALUE
}
}
gg.matrix[0][1] = 5
gg.matrix[0][2] = 3
gg.matrix[1][0] = 5
gg.matrix[1][3] = 99
gg.matrix[1][4] = 4
gg.matrix[2][0] = 3
gg.matrix[2][3] = 6
gg.matrix[3][1] = 7
gg.matrix[3][2] = 6
gg.matrix[3][4] = 1
gg.matrix[4][1] = 4
gg.matrix[4][3] = 1
gg.edgnum = 12 / 2
}
func PrintG(gg Graph, l int) {
for i := 0; i < l; i++ {
fmt.Println(gg.matrix[i])
}
}
喜歡拉程式碼得兄弟自己下載
https://github.com/godla/golang-sort-data-structures-study.git
一起每天寫一點
更多原創文章乾貨分享,請關注公眾號
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 從零開始學golang之TCPGolangTCP
- 從零開始學PythonPython
- 從零開始學習C++之遞推C++
- 從零開始學YC-Framework之鑑權Framework
- 從零開始學 Python 之基礎語法Python
- 從零開始學習laravelLaravel
- 從零開始學習KafkaKafka
- 【ROS】從零開始學ROSROS
- 從零開始學 Spring BootSpring Boot
- 從零開始學正則
- 從零開始搭建 gRPC 服務 – Golang 篇(一)RPCGolang
- 從零開始搭建 gRPC 服務 - Golang 篇(二)RPCGolang
- flutter之從零開始搭建(一)之 BottomNavigationBarFlutterNavigation
- 從零開始機器學習機器學習
- 從零開始
- 從零開始學習C++之if判斷語句C++
- Golang從零開始(一):安裝和開發工具VSCode配置GolangVSCode
- 從零開始學習機器學習機器學習
- 不怕從零開始,只怕從未開始!
- flutter之從零開始搭建(二)之 Navigator路由Flutter路由
- 從零開始學五筆(一):概述
- 從零開始學習C++(0)C++
- 【從零開始學爬蟲】建立模板爬蟲
- 從零開始學Spring Boot系列-SpringApplicationSpring BootAPP
- 從零開始學Electron筆記(六)筆記
- 從零開始學Electron筆記(七)筆記
- 從零開始學mitmproxy抓包工具MIT
- 從零開始學Electron筆記(二)筆記
- 從零開始學Electron筆記(四)筆記
- 從零開始學Electron筆記(五)筆記
- 從零開始學Electron筆記(一)筆記
- 從零開始學Electron筆記(三)筆記
- 從零開始學習 Go ——安裝Go
- 從零開始機器學習-03機器學習
- 從零開始機器學習--4機器學習
- 從零開始機器學習--05機器學習
- 從零開始學C語言pdfC語言
- 從零開始學 Web 之 Vue.js(六)Vue的元件WebVue.js元件
- M1版Mac從零開始搭建Golang開發環境MacGolang開發環境