@@ -342,6 +342,64 @@ class Solution:
342342 return path
343343```
344344
345+ ### GO
346+ ``` go
347+ type pair struct {
348+ target string
349+ visited bool
350+ }
351+ type pairs []*pair
352+
353+ func (p pairs ) Len () int {
354+ return len (p)
355+ }
356+ func (p pairs ) Swap (i , j int ) {
357+ p[i], p[j] = p[j], p[i]
358+ }
359+ func (p pairs ) Less (i , j int ) bool {
360+ return p[i].target < p[j].target
361+ }
362+
363+ func findItinerary (tickets [][]string ) []string {
364+ result := []string {}
365+ // map[出发机场] pair{目的地,是否被访问过}
366+ targets := make (map [string ]pairs)
367+ for _ , ticket := range tickets {
368+ if targets[ticket[0 ]] == nil {
369+ targets[ticket[0 ]] = make (pairs, 0 )
370+ }
371+ targets[ticket[0 ]] = append (targets[ticket[0 ]], &pair{target: ticket[1 ], visited: false })
372+ }
373+ for k , _ := range targets {
374+ sort.Sort (targets[k])
375+ }
376+ result = append (result, " JFK" )
377+ var backtracking func () bool
378+ backtracking = func () bool {
379+ if len (tickets)+1 == len (result) {
380+ return true
381+ }
382+ // 取出起飞航班对应的目的地
383+ for _ , pair := range targets[result[len (result)-1 ]] {
384+ if pair.visited == false {
385+ result = append (result, pair.target )
386+ pair.visited = true
387+ if backtracking () {
388+ return true
389+ }
390+ result = result[:len (result)-1 ]
391+ pair.visited = false
392+ }
393+ }
394+ return false
395+ }
396+
397+ backtracking ()
398+
399+ return result
400+ }
401+ ```
402+
345403### C语言
346404
347405``` C
0 commit comments