我需要在标准ML中编写SCC算法。但我不知道怎么做 我有以下TYPE,必须在代码中使用:
type vertex = int
type edge = int * int
type graph = (vertex * vertex list) list
fun dfs (g: graph) (n: vertex): vertex list =
let
fun helper (todo: vertex list) (visited: vertex list): vertex list =
case todo of
[] => []
| h::t => if (List.exists (fn x => x = h) visited)
then helper t visited
else
let
val adj = case List.find (fn (n, _) => n = h) g of
NONE => raise Fail "incomplete adjacency list"
| SOME (_, adj) => adj
in
h :: (helper (adj @ t) (h::visited))
end
in
helper [n] []
end
以上代码已经编译并正确运行 我把这些放在代码中,因为我知道在计算SCC时需要dfs 有没有人有解决方案?
答案 0 :(得分:2)
答案 1 :(得分:-1)
我猜你正在尝试使用标准ML(http://www.smlnj.org/sml.html)。
在课堂上,您的老师应该提供一个用于创建SML代码的建模工具,或者应该将您引导到用于编写代码的资源。他/她也应该提供示例代码 - 您的书(或书后面的CD)应该包含SML代码。
假设您没有建模工具,我的建议如下。首先参考教师或书籍提供的示例代码,然后选择能够解决与您的需求最相似的问题的代码。复制&把它粘贴到你的答案中,绝对肯定会在答案的最开始时清楚地引用来源。然后,使用课程中的其他示例,您的书中的详细信息以及smlnj.org(特别是教程)的“文档和文献”部分下的资源来实现您的解决方案。
然后,如果你有一个绊脚石 - 一些在课堂上没有讨论过的东西,并且你的书中没有涉及,但你无法解决,你应该与你的TA或老师讨论。如果您向其中一个人提问,那么您的老师可以发现课程中没有明确涵盖该主题。如果你不问他们,那么他们就不会知道,你班上其他人的大部分都可能会遇到这个问题。
最后,如果您的老师和助教不可用,并且您遇到了一个您不知道如何解决的问题,并且您有一个非常具体的问题(例如,“这是我的代码;它不会编译,我无法弄清楚为什么“),那时你应该问Stack Overflow。