我試圖通過一些簡單的圖表更好地理解 golang。我在課堂上嘗試過這個,但我無法真正弄清楚。問題是我知道解決方案非常簡單。我試圖讓它通過讀取邊緣來打印每條單獨的路徑。我已經玩過相當多的代碼了,這確實是我能得到的最簡單的形式。package mainimport "fmt"type Graph struct { Edges map[string][]string}// NewGraph: Create graph with n nodes.func NewGraph() *Graph { return &Graph{ Edges: make(map[string][]string), }}// AddEdge: Add an edge from u to v.func (g *Graph) AddEdge(u, v string) { g.Edges[u] = append(g.Edges[u], v)}func (g *Graph) Walk(u string) { for _, v := range g.Edges[u] { fmt.Printf("%s -> %s", u, v) g.Walk(v) }}func (g *Graph) adjacentEdgesExample() { fmt.Println("Printing all edges in graph.") for u, adjacent := range g.Edges { // Nodes are labelled 0 to N-1. for _, v := range adjacent { // Edge exists from u to v. fmt.Printf("Edge: %s -> %s\n", u, v) } }}func main() { g := NewGraph() g.AddEdge("A", "B") g.AddEdge("A", "D") g.AddEdge("D", "E") g.AddEdge("B", "C") g.adjacentEdgesExample() fmt.Println(g.Edges) g.Walk("A")}示例位于:https://goplay.space/#Ro1puZYgu5X其結果是:Printing all edges in graph.Edge: B -> CEdge: A -> BEdge: A -> DEdge: D -> Emap[A:[B D] B:[C] D:[E]]A -> BB -> CA -> DD -> E% 我希望看到 Walk 方法做這樣的事情:A -> B -> CA -> D -> E
1 回答

瀟湘沐
TA貢獻1816條經驗 獲得超6個贊
實際上,代碼中有很多內容可以更改。Walk
但是,對檢查是否為基邊的函數的快速修復可以修復格式問題。main
現在應該從with調用它g.Walk("A", true)
。
func (g *Graph) Walk(u string, f bool) {
? ? for _, v := range g.Edges[u] {
? ? ? ? if f == true {
? ? ? ? ? ? fmt.Printf("\n%s -> %s", u, v)
? ? ? ? } else {
? ? ? ? ? ? fmt.Printf(" -> %s", v)
? ? ? ? }
? ? ? ? g.Walk(v, false)
? ? }
}
編輯 實際上,您可以只檢查f然后將您設置為"\n + u"相應的:
func (g *Graph) Walk(u string, f bool) {
? ? for _, v := range g.Edges[u] {
? ? ? ? if f {
? ? ? ? ? ? u = "\n" + u
? ? ? ? } else {
? ? ? ? ? ? u = ""
? ? ? ? }
? ? ? ? fmt.Printf("%s -> %s", u, v)
? ? ? ? g.Walk(v, false)
? ? }
}
- 1 回答
- 0 關注
- 137 瀏覽
添加回答
舉報
0/150
提交
取消