0

「p」はノード数です。したがって、私のソリューションでは、ユーザーはすべての行列要素を入力する必要があります。7 つのノードの場合、49 の数字です。私はそれをこのようにしたくない。ある点から別の点までの距離をユーザーに尋ねたいと思います。私のプログラムの奇妙な名前で申し訳ありません。それらは私の言語です。latogatott = 訪問、tav = 距離

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();
    }
}

}

4

1 に答える 1

0

グラフが無向で、(コメントに記載されているように) ユーザーに 2 つのノード間の距離を入力してもらいたい場合は、2 つの距離として、すべてのノードをループし、他のすべてのノードを別のループでループする必要があります。 1-2 の距離がある場合、1 は必要ありません。

for(int i = 0; i < p; i++) {
  for(int k = i+1; k < p; k++) {
    // ask user for distance between i and k
  }
}
于 2016-04-21T15:00:02.047 に答える