#lang racket
(require "util/p-list.rkt")
(putprop! 'Start '(a b) '#:subnodes)
(putprop! 'a '(e c) '#:subnodes)
(putprop! 'e '(g h) '#:subnodes)
(putprop! 'b '(c f) '#:subnodes)
(putprop! 'c '(i j) '#:subnodes)
(putprop! 'f '(k l) '#:subnodes)
(putprop! 'l '(b) '#:subnodes)
;;; 展開関数
(define (expand node)
(keyword-get node '#:subnodes '()))
;;; ネットワーク探索
(define (network-depth node1 node2)
(let loop ((stack (expand node1)) (visited '()))
(if (null? stack)
null
(let ((head (car stack)) (tail (cdr stack)))
(or (eq? head node2)
(loop (if (memq head visited)
tail
(append (expand head) tail))
(cons head visited)))))))
I2xhbmcgcmFja2V0CgoocmVxdWlyZSAidXRpbC9wLWxpc3Qucmt0IikKCihwdXRwcm9wISAnU3RhcnQgJyhhIGIpICcjOnN1Ym5vZGVzKQoocHV0cHJvcCEgJ2EgJyhlIGMpICcjOnN1Ym5vZGVzKQoocHV0cHJvcCEgJ2UgJyhnIGgpICcjOnN1Ym5vZGVzKQoocHV0cHJvcCEgJ2IgJyhjIGYpICcjOnN1Ym5vZGVzKQoocHV0cHJvcCEgJ2MgJyhpIGopICcjOnN1Ym5vZGVzKQoocHV0cHJvcCEgJ2YgJyhrIGwpICcjOnN1Ym5vZGVzKQoocHV0cHJvcCEgJ2wgJyhiKSAnIzpzdWJub2RlcykKCjs7OyDlsZXplovplqLmlbAKKGRlZmluZSAoZXhwYW5kIG5vZGUpCiAgKGtleXdvcmQtZ2V0IG5vZGUgJyM6c3Vibm9kZXMgJygpKSkKCjs7OyDjg43jg4Pjg4jjg6/jg7zjgq/mjqLntKIKKGRlZmluZSAobmV0d29yay1kZXB0aCBub2RlMSBub2RlMikKICAobGV0IGxvb3AgKChzdGFjayAoZXhwYW5kIG5vZGUxKSkgKHZpc2l0ZWQgJygpKSkKICAgIChpZiAobnVsbD8gc3RhY2spCiAgICAgICAgbnVsbAogICAgICAgIChsZXQgKChoZWFkIChjYXIgc3RhY2spKSAodGFpbCAoY2RyIHN0YWNrKSkpCiAgICAgICAgICAob3IgKGVxPyBoZWFkIG5vZGUyKQogICAgICAgICAgICAgIChsb29wIChpZiAobWVtcSBoZWFkIHZpc2l0ZWQpCiAgICAgICAgICAgICAgICAgICAgICAgIHRhaWwKICAgICAgICAgICAgICAgICAgICAgICAgKGFwcGVuZCAoZXhwYW5kIGhlYWQpIHRhaWwpKQogICAgICAgICAgICAgICAgICAgIChjb25zIGhlYWQgdmlzaXRlZCkpKSkpKSk=