#lang racket
(require "util/p-list.rkt")
(putprop! 'a '(b c) '#:subnodes)
(putprop! 'b '(d e) '#:subnodes)
(putprop! 'e '(i j) '#:subnodes)
(putprop! 'c '(f g h) '#:subnodes)
(putprop! 'g '(k) '#:subnodes)
;;; 展開関数
(define (expand node)
(keyword-get node '#:subnodes '()))
;;; 幅優先探索
(define (breadth start)
(let loop ((queue `(,start)))
(if (null? queue)
null
(let ((node (car queue)))
(if (keyword-get node '#:success)
node
(loop (append (cdr queue) (expand node))))))))
I2xhbmcgcmFja2V0CgoocmVxdWlyZSAidXRpbC9wLWxpc3Qucmt0IikKCihwdXRwcm9wISAnYSAnKGIgYykgJyM6c3Vibm9kZXMpCihwdXRwcm9wISAnYiAnKGQgZSkgJyM6c3Vibm9kZXMpCihwdXRwcm9wISAnZSAnKGkgaikgJyM6c3Vibm9kZXMpCihwdXRwcm9wISAnYyAnKGYgZyBoKSAnIzpzdWJub2RlcykKKHB1dHByb3AhICdnICcoaykgJyM6c3Vibm9kZXMpCgo7Ozsg5bGV6ZaL6Zai5pWwCihkZWZpbmUgKGV4cGFuZCBub2RlKQogIChrZXl3b3JkLWdldCBub2RlICcjOnN1Ym5vZGVzICcoKSkpCgo7Ozsg5bmF5YSq5YWI5o6i57SiCihkZWZpbmUgKGJyZWFkdGggc3RhcnQpCiAgKGxldCBsb29wICgocXVldWUgYCgsc3RhcnQpKSkKICAgIChpZiAobnVsbD8gcXVldWUpCiAgICAgICAgbnVsbAogICAgICAgIChsZXQgKChub2RlIChjYXIgcXVldWUpKSkKICAgICAgICAgIChpZiAoa2V5d29yZC1nZXQgbm9kZSAnIzpzdWNjZXNzKQogICAgICAgICAgICAgIG5vZGUKICAgICAgICAgICAgICAobG9vcCAoYXBwZW5kIChjZHIgcXVldWUpIChleHBhbmQgbm9kZSkpKSkpKSkpCg==