顯然,我的老師認爲即使我們沒有時間學習東西(也沒有足夠的例子),我們應該繼續前進,所以我現在需要知道如何製作Floyd-Warshall和Warshall的算法在clisp中。鄰接矩陣/ Floyd/Warshall in lisp
當我同序言一樣,我的問題是,產生從圖中的鄰接矩陣,在這種情況下,這將是列表的列表,如:
((A B) (A C) (A D) (B C) (C D))
這應該產生:
((0 1 1 1) (1 0 1 9) (1 1 0 1) (1 9 1 0))
我有這樣的:
(defun floyd(graph)
(setf l (length graph))
(setf mat (matrix l graph))
)
(defun matrix(l graph)
(setf matrix (make-array (list l l)))
(dotimes (i l)
(dotimes (j l)
(if (= i j)
(setf (aref matrix i j) 0)
(setf (aref matrix i j) ???)
)
)
)
matrix
)
任何幫助是極大的讚賞。
另外,還有一種題外話:如果我能解決我自己的問題,我是否應該回答自己是否有回答問題?
有一個[SelfLearner徽章](http:// stackoverflow .com /徽章/ 14 /自學者),如果你用3或更多的分數回答你自己的問題。我會以此作爲暗示,回答自己是否可以接受解決方案。 – 2011-05-24 22:49:38
作爲更多慣用代碼的開始,使用['let'](http://www.lispworks.com/documentation/HyperSpec/Body/s_let_l.htm)代替'l','mat'的'setf'和'matrix'。 – 2011-05-24 22:54:51
CLISP是一個實現,該語言被稱爲Common Lisp或簡稱CL。您還需要聲明變量(例如使用LET)。設置任意未定義的變量不是一個好主意。也不要在一行上用單個括號格式化代碼。 – 2011-05-24 23:21:30