-2

標準 ML で SCC アルゴリズムを記述する必要があります。しかし、方法がわかりません。
コードで使用する必要がある次のタイプがあります。

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 の計算に必要なことがわかっているので、これらをコードに入れました。
誰にも解決策がありますか?

4

2 に答える 2

2

擬似コード - http://algowiki.net/wiki/index.php/Tarjan's_algorithm .

于 2010-02-02T21:52:14.113 に答える
-1

標準 ML ( http://www.smlnj.org/sml.html )を使用しようとしていると思います。

授業中に、教師は SML コードを作成するためのモデリング ツールを提示するか、コードを記述するためのリソースを紹介する必要があります。また、サンプル コードを提示している必要があります。また、書籍 (または書籍の巻末にある CD) に SML コードが含まれている必要があります。

モデリング ツールを持っていないと仮定すると、私の推奨事項は次のとおりです。先生や本で提供されているサンプル コードを参照することから始めて、ニーズに最も近い問題を解決するコードを選択します。それをコピーして回答に貼り付けます。回答の冒頭でソースを明確に引用してください。次に、クラスの他の例、書籍の詳細、および smlnj.org の「ドキュメントと文献」セクション (特にチュートリアル) にあるリソースを使用して、ソリューションを実装します。

次に、つまずきがあり、それがクラスで議論されておらず、本でも取り上げられていないが、解決できない場合は、TA または教師と話し合う必要があります。そのうちの 1 人に質問すると、そのトピックがクラスで明確に扱われていないことが教師にわかります。あなたが彼らに尋ねなければ、彼らは知らないだろうし、あなたのクラスの残りの多くはそのトピックに苦労するかもしれない.

そして最後に、教師と TA が利用できず、解決方法がわからない問題に直面していて、非常に具体的な質問がある場合 (たとえば、「これが私のコードです。解決しない」など)。コンパイルできず、その理由がわかりません」)、その時点で Stack Overflow に問い合わせてください。

于 2010-02-02T22:21:14.260 に答える