@@ -342,6 +342,64 @@ class Solution:
342
342
return path
343
343
```
344
344
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
+
345
403
### C语言
346
404
347
405
``` C
0 commit comments