Advertisement
SergeyPGUTI

12.1.2

May 27th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.50 KB | None | 0 0
  1. http://prog-cpp.ru/deikstra/
  2. import java.util.ArrayList;
  3. import java.util.Scanner;
  4. import java.io.PrintWriter;
  5.  
  6. import static javafx.scene.input.KeyCode.V;
  7.  
  8. /**
  9.  * Created by Сергей on 27.05.2016.
  10.  */
  11. public class Solution321 {
  12.     public static void main(String Args[]){
  13.         int INF = Integer.MAX_VALUE / 2;
  14.         int arr [][];
  15.         int dist[]; //массив для хранения расстояния от стартовой вершины
  16.         boolean noUsed[]; //массив для хранения информации о пройденных и не пройденных вершинах
  17.         int start,end; //стартовая,конечная вершины, от которой ищется расстояние до всех других
  18.         Scanner sc=new Scanner(System.in);
  19.         PrintWriter printWriter = new PrintWriter(System.out);
  20.         int min,minIndex;
  21.         int n=sc.nextInt();
  22.         start=sc.nextInt();
  23.         end=sc.nextInt();
  24.         start--;
  25.         end--;
  26.         //инициализация
  27.         arr=new int[n][n];
  28.  
  29.         dist=new int[n];
  30.         for (int i=0;i<n;i++)
  31.             dist[i]=INF;
  32.  
  33.         noUsed=new boolean[n];
  34.         for (int i=0;i<n;i++)
  35.         {
  36.             noUsed[i]=true;
  37.         }
  38.  
  39.  
  40.         //ввод матрицы смежности
  41.         for (int i=0;i<n;i++)
  42.          for (int j=0;j<n;j++) {
  43.              arr[i][j]=sc.nextInt();
  44.          }
  45.         //алгоритм дейстры
  46.         dist[start] = 0;//расстояние до стартовой вершины равно 0
  47.         int minindex,temp;
  48.         do {
  49.             minindex = 10000;//индекс след вершины
  50.             min = 10000;//значение для поиска след вершины
  51.             for(int i=0; i<n;i++) {
  52.                 if((noUsed[i] == true) && (dist[i]<min)) {
  53.                     min = dist[i];
  54.                     minindex = i;
  55.                 }
  56.             }
  57.             if(minindex != 10000) {
  58.                 for(int i=0;i<n;i++) {
  59.                     if(arr[minindex][i] > 0) {
  60.                         temp = min+arr[minindex][i];
  61.                         if(temp < dist[i])
  62.                             dist[i] = temp;
  63.                     }
  64.                 }
  65.                 noUsed[minindex] = false;
  66.             }
  67.         } while(minindex < 10000);
  68.         for (int i=0;i<n;i++)
  69.         {if (dist[i]==INF) dist[i]=-1;}
  70.         System.out.print(dist[end]);
  71.         }
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement