#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 (exhaustive start)
(let loop ((queue `(,start)) (result '()))
(if (null? queue)
result
(let ((node (car queue)))
(loop (append (cdr queue) (expand node))
(if (keyword-get node '#:success)
(cons node result)
result))))))
I2xhbmcgcmFja2V0CgoocmVxdWlyZSAidXRpbC9wLWxpc3Qucmt0IikKCihwdXRwcm9wISAnYSAnKGIgYykgJyM6c3Vibm9kZXMpCihwdXRwcm9wISAnYiAnKGQgZSkgJyM6c3Vibm9kZXMpCihwdXRwcm9wISAnZSAnKGkgaikgJyM6c3Vibm9kZXMpCihwdXRwcm9wISAnYyAnKGYgZyBoKSAnIzpzdWJub2RlcykKKHB1dHByb3AhICdnICcoaykgJyM6c3Vibm9kZXMpCgo7Ozsg5bGV6ZaL6Zai5pWwCihkZWZpbmUgKGV4cGFuZCBub2RlKQogIChrZXl3b3JkLWdldCBub2RlICcjOnN1Ym5vZGVzICcoKSkpCgo7Ozsg5b655bqV5o6i57SiCihkZWZpbmUgKGV4aGF1c3RpdmUgc3RhcnQpCiAgKGxldCBsb29wICgocXVldWUgYCgsc3RhcnQpKSAocmVzdWx0ICcoKSkpCiAgICAoaWYgKG51bGw/IHF1ZXVlKQogICAgICAgIHJlc3VsdAogICAgICAgIChsZXQgKChub2RlIChjYXIgcXVldWUpKSkKICAgICAgICAgIChsb29wIChhcHBlbmQgKGNkciBxdWV1ZSkgKGV4cGFuZCBub2RlKSkKICAgICAgICAgICAgICAgIChpZiAoa2V5d29yZC1nZXQgbm9kZSAnIzpzdWNjZXNzKQogICAgICAgICAgICAgICAgICAgIChjb25zIG5vZGUgcmVzdWx0KQogICAgICAgICAgICAgICAgICAgIHJlc3VsdCkpKSkpKQ==