2

グラフでの深さ優先探索に関するコードは次のとおりです。このコードでbufferedReaderクラスが使用された理由を誰が知っていますか?そして、なぜnextInt関数が代わりに使用されないのですか?その特権は何ですか?処理を高速化するためですか?ありがとう :)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Graph
{
int g[][];
int v,e;
int visited[];
void createGraph()throws IOException
{
    int a,b;
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.print("\n Enter Number Of Vertices = ");
    v=Integer.parseInt(br.readLine());
    System.out.print("\n Enter Number Of Edges = ");
    e=Integer.parseInt(br.readLine());  
    g=new int[v+1][v+1];
    for(int i=1;i<=e;i++)
    {
        System.out.print("\n Enter Edge Infomation ");
        System.out.print("\n From =");
        a=Integer.parseInt(br.readLine());
        System.out.print("\n To =");
        b=Integer.parseInt(br.readLine());  
        g[a][b]=g[b][a]=1;
    }
}
void callDFS()
{
    visited = new int[v+1];
    dfs(1);
}   
void dfs(int k)
{
    System.out.print(k + "\t");
    visited[k]=1;
    for(int i=1;i<=v;i++)
    {
        if(g[k][i] !=0 && visited[i]!=1)
        dfs(i);
    }
}
}
class DFS
{
public static void main(String args[])throws IOException
{
    Graph g = new Graph();
    g.createGraph();
    g.callDFS();
}
}
4

3 に答える 3

2

おそらく、このコードが書かれたとき、Scannerクラスは存在しませんでした(実際、java 1.4にはScannerクラスがありませんでした)、またはこのコードを書いた人は、Scanner.nextLine()メソッドを使用する代わりにBufferedReaderのreadLineメソッドを使用することを単に好んだでしょう。私はあなたの質問について他の説明を見ることができません

于 2013-01-12T11:13:48.507 に答える
2

これは、ストリームをどのように使用するかという問題です。バッファ付きリーダーは、単純なスレッド化されたアプリケーション用に存在します。これは、スキャナーのスレッドセーフの欠如によるものです。

この質問から、スキャナーとBufferedReaderについてさらに詳しく知ることができると思います。

于 2013-01-14T09:54:03.403 に答える
0

BufferedReaderはより単純です(これにより少し効率的になります)が、BufferdReaderが提供する機能を使用することを意図していることを示すより明確な選択でもあります。すなわちreadLine()、メインのものです。

要するに、あなたがBufferedReader知っているなら、それはただ行を読むつもりです。あなたがそれを使うなら、Scannerそれはあなたがもっと複​​雑な何かを読んでいるかもしれないし、そうでないかもしれないことを意味します。

ところで:

  Integer.parseInt(br.readLine())

  scanner.nextInt();

noob開発者では通常区別が失われますが、同じではありません。このため、私は最初の例を好みます。違いは、新しい行の処理方法です。

于 2013-01-12T11:29:52.520 に答える