2016-04-21 64 views
0

'p'是節點的數量。所以現在在我的解決方案中,用戶必須鍵入所有的矩陣元素,在7個節點的情況下,49個數字。我不想這樣。我想問用戶從一點到另一點的距離。對不起,在我的程序中的奇怪的名字,他們在我的語言。 latogatott =走訪,TAV =距離Java最短路徑通用解決方案

package legrovidebb_ut; 

import java.util.Scanner; 

public class Legrovidebb_ut { 

public static void main (String[] args) { 

    Scanner scan = new Scanner(System.in); 

     System.out.println("Adja meg a pontok szamat: "); 

    int p; 

    p = scan.nextInt(); 

    int[][] matrix = new int [p][p]; 
    int[] tav = new int[p]; 
    int[] latogatott = new int[p]; 
    int[] pre = new int[p]; 
    int min; 
    int nextNode = 0; 


    System.out.println("Enter the matrix!"); 


    for (int i=0; i<p; i++){ 

     latogatott[i]=0; 

     pre[i]=0; 

     for (int j=0;j<p;j++){ 

      matrix[i][j] = scan.nextInt(); 
      if(matrix[i][j]== 0) 
       matrix[i][j]=999; 
     } 
    } 
    tav = matrix[0]; 
    tav[0]=0; 
    latogatott[0]=1; 

    for (int i=0;i<p;i++){ 
     min=999; 

    for(int j=0;j<p;j++){ 
     if(min>tav[j] && latogatott[j]!=1){ 

      min=tav[j]; 
      nextNode=j; 
     } 
    } 
    latogatott[nextNode]=1; 

    for(int c=0;c<p;c++){ 
     if(latogatott[c]!=1){ 
      if(min+matrix[nextNode][c]<tav[c]){ 
       tav[c]=min+matrix[nextNode][c]; 
       pre[c]=nextNode; 
      } 
     } 
    } 
    } 
    for (int i=0;i<p;i++){ 
     System.out.print("|" + tav[i]); 
    } 
    System.out.println("|"); 

    for(int i=0;i<p;i++){ 
     int j; 
     System.out.print("Ut: " + (i+1)); 
     j=i; 

     do{ 
      j=pre[j]; 
      System.out.println(" <- " + (j+1)); 
     }while(j!=0); 
     System.out.println(); 
    } 
} 

}

+0

那麼你的問題是什麼?如何讓用戶輸入距離? –

+0

是的,因爲它已經很複雜了,我需要改變它作爲來自用戶的輸入:1到2之間的距離:,1-3,1-4 ....並且不再詢問2-1 cos它已經給出,2-3,2-4等等 –

+0

這隻有當你的圖是一個無向圖時纔給出。在這種情況下,您必須循環遍歷圖的每個節點並創建一個內部循環,循環遍歷所有更高的索引,例如: for(int i = 0; i

回答

0

如果是無向圖,你希望用戶輸入每兩個節點之間的距離(如您的評論說),你將需要一個循環通過所有的節點和另一個循環通過所有其他節點,因爲2-1距離不需要,如果你有1-2的距離:

for(int i = 0; i < p; i++) { 
    for(int k = i+1; k < p; k++) { 
    // ask user for distance between i and k 
    } 
} 
+0

是的,我需要無向圖的解決方案。好的,我嘗試在我的代碼中實現這個。 –