1

次のファイル (1) ノード 2) メイン 3) グラフ) がここに添付されています。

https://www.dropbox.com/sh/at9u2684k345uv0/dK77w58rEM

基本的に、私は BFS と DFS を実装していますが、グラフ ファイルのコードに関していくつか質問があります。

private Node getUnvisitedChildNode(Node n)
{

    int index=nodes.indexOf(n);
    int j=0;
    while(j<size)
    {
        if(adjMatrix[index][j]==1 && ((Node)nodes.get(j)).visited==false)
        {
            return (Node)nodes.get(j);
        }
        j++;
    }
    return null;
}

誰が何をするのか教えてもらえますか

(Node)nodes.get(j))

ここって意味?

他にもいくつか質問があります:

Graph クラスの bfs() メソッドで、次の質問があります。

1) 私が理解したように

"Queue<Node> q=new LinkedList<Node>();" 

LinkList が Queue を実装することを意味します。

では、この場合に LinkedList が必要な理由は、「Queue q = new Queue();」を介して行うことはできません。?

2) "this" キーワードの使用法を何度も読んだことがありますが、その理由を誰か教えてください。

q.add(this.rootNode) が使用されていますが、なぜ q.add(rootNode) だけではないのでしょうか?

3) 次の行は何を意味しますか?

while((child=getUnvisitedChildNode(n))!=null)

ありがとう

4

1 に答える 1

2

クラスを調べると、次のGraph宣言が表示されます。

public ArrayList nodes = new ArrayList();

これはArrayList型を使用していますが、ジェネリックを使用していません (ちなみに、これは悪い考えです)。コード行

((Node)nodes.get(j)).visited

以下を意味します。

  1. j番目の要素を取得しnodes ArrayListます。はジェネリックなしで使用されるためArrayList、これはタイプ のオブジェクトを返しますObject
  2. そのオブジェクトを にキャストしますNode。これは、そのオブジェクトが実際に何であるかです。
  3. その中のvisitedフィールドを調べますNode

つまり、これは「リスト内の格納された at 位置を検索し、そのNodeフィールドを読み取る」ことを意味します。jnodesvisited

のように、作成者が でジェネリックを使用した場合、これらすべてを簡単に回避できますArrayList

public ArrayList<Node> nodes = new ArrayList<Node>();

この場合、ノードを検索してそのvisitedフィールドを読み取るコードは次のようになります。

nodes.get(j).visited

お役に立てれば!

于 2013-04-08T05:49:12.237 に答える