我有形式的列表:刪除元素
((1 (3 2 4)) (2 (3 1)) (3 (2 1)) (4 (1)))
該列表表示的形式(「節點」(「邊緣」))的曲線圖。我該如何編寫一個採用表示節點值的過程,例如「1」,並從圖中刪除該節點。例如:使用輸入5和'((1(3 2))(2(3 1))(3(2 1))(4(5))(5(4))的(刪除節點ng)應該輸出:
((1 (3 2)) (2 (3 1)) (3 (2 1)) (4()))
從上面的例子可以看出,節點和添加到該節點的任何邊都必須被刪除。我的代碼迄今如下:
(define graph '((1 (3 2)) (2 (3 1)) (3 (2 1)) (4 (5)) (5 (4))))
;...Other procedures not shown...
(define (delete-node n g)
(define (delete ls item)
(cond ((null? ls) nil)
((pair? (car ls))
(cons (delete (car ls) item) (delete (cdr ls) item)))
((equal? (car ls) item) (delete (cdr ls) item))
(else (cons (car ls) (delete (cdr ls) item)))))
(delete (filter (lambda (x) (not (eq? (car x) n))) g) n))
(delete-node 5 graph)
上面的代碼工作,但有沒有這樣做的更有效的方法?
同樣,你嘗試過什麼?你可以發佈你到目前爲止所以我們可以看到你卡住的地方嗎? –
已更新,以澄清問題並添加更多信息。 – martinsarif