2016-10-06 5 views
0

私は最短経路アルゴリズムを使用していますが、主関数内の行列入力をテキストファイルから読み込むコードを取る代わりに完全に理解しています。私は初心者であり、このコードがどのように機能するかを知ろうとしています。私は以下のコードに所有権を主張していません。ファイルからの行列読み込みDijkstraのアルゴリズム

ここに私が使用しているコード全体があります。

// A Java program for Dijkstra's single source shortest path algorithm. 
// The program is for adjacency matrix representation of the graph 
import java.util.*; 
import java.lang.*; 
import java.io.*; 


class ShortestPath 
{ 

    // A utility function to find the vertex with minimum distance value, 
    // from the set of vertices not yet included in shortest path tree 
    static final int V=5; 
    int minDistance(int dist[], Boolean sptSet[]) 
    { 
     // Initialize min value 
     int min = Integer.MAX_VALUE, min_index=-1; 

     for (int v = 0; v < V; v++) 
      if (sptSet[v] == false && dist[v] <= min) 
      { 
       min = dist[v]; 
       min_index = v; 
      } 

     return min_index; 
    } 

    // A utility function to print the constructed distance array 
    void printSolution(int dist[], int n) 
    { 
     System.out.println("Distance from starting vertex"); 
     for (int i = 0; i < V; i++) 
      System.out.println(i+" \t\t "+dist[i]); 
    } 

    // Funtion that implements Dijkstra's single source shortest path 
    // algorithm for a graph represented using adjacency matrix 
    // representation 
    void dijkstra(int graph[][], int src) 
    { 
     int dist[] = new int[V]; // The output array. dist[i] will hold 
           // the shortest distance from src to i 

     // sptSet[i] will true if vertex i is included in shortest 
     // path tree or shortest distance from src to i is finalized 
     Boolean sptSet[] = new Boolean[V]; 

     // Initialize all distances as INFINITE and stpSet[] as false 
     for (int i = 0; i < V; i++) 
     { 
      dist[i] = Integer.MAX_VALUE; 
      sptSet[i] = false; 
     } 

     // Distance of source vertex from itself is always 0 
     dist[src] = 0; 

     // Find shortest path for all vertices 
     for (int count = 0; count < V-1; count++) 
     { 
      // Pick the minimum distance vertex from the set of vertices 
      // not yet processed. u is always equal to src in first 
      // iteration. 
      int u = minDistance(dist, sptSet); 

      // Mark the picked vertex as processed 
      sptSet[u] = true; 

      // Update dist value of the adjacent vertices of the 
      // picked vertex. 
      for (int v = 0; v < V; v++) 

       // Update dist[v] only if is not in sptSet, there is an 
       // edge from u to v, and total weight of path from src to 
       // v through u is smaller than current value of dist[v] 
       if (!sptSet[v] && graph[u][v]!=0 && 
         dist[u] != Integer.MAX_VALUE && 
         dist[u]+graph[u][v] < dist[v]) 
        dist[v] = dist[u] + graph[u][v]; 
     } 

     // print the constructed distance array 
     printSolution(dist, V); 
    } 

    // Driver method 
    public static void main (String[] args) 
    { 
     int graph[][] = new int[][] {{0, 14, 0, 0, 0}, 
            {0, 0, 3, 10, 0}, 
            {0, 0, 0, 4, 0}, 
            {0, 0, 0, 0, 10}, 
            {0, 0, 0, 0, 0}, 
           }; 
     ShortestPath t = new ShortestPath(); 
     t.dijkstra(graph, 0); 
    } 
} 
+0

あなたの質問は何ですか? – NiVeR

+0

テキストファイルに行列がありますが、どのようにプログラムを読み込ませるのですか? –

+0

単純なコード入力=新しいScanner(新しいファイル( "src/array.txt")); {[ {IF(input.hasNextInt()){ ため(++ J INT J = 0; J <カラム)(; iが行を<++ iはi = 0の整数)ため i] [j] = input.nextInt(); } } } –

答えて

0
File file = new File("10_Random.txt"); 
    try { 

     Scanner sc = new Scanner(file); 
     int graph[][] = new int[5][5]; 
     for(int i = 0 ; i < 5; i++){ 
      for(int j = 0 ; j < 5; j++){ 
       graph[i][j] = sc.nextInt(); 
      } 
     } 
     sc.close(); 
    } 
    catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

メイン関数内でそれを置きます。

関連する問題