Advertisement
SergeyPGUTI

12.1.3

May 27th, 2016
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.03 KB | None | 0 0
  1. import java.util.ArrayList;
  2. import java.util.Scanner;
  3. import java.io.PrintWriter;
  4.  
  5. import static javafx.scene.input.KeyCode.V;
  6.  
  7. /**
  8.  * Created by Сергей on 27.05.2016.
  9.  */
  10.  
  11. //ИСПОЛЬЗУЕМ ТОТ ЖЕ АЛГОРИТМ ДЕЙСТРА, ИЗМЕНИМЛСЯ ЛИШЬ ФОРМАТ ВХОДНЫХ ДАННЫХ
  12. public class Solution321 {
  13.     public static void main(String Args[]){
  14.         int INF = Integer.MAX_VALUE / 2;
  15.         int arr [][];
  16.         int dist[]; //массив для хранения расстояния от стартовой вершины
  17.         boolean noUsed[]; //массив для хранения информации о пройденных и не пройденных вершинах
  18.         int start,end; //стартовая,конечная вершины, от которой ищется расстояние до всех других
  19.         Scanner sc=new Scanner(System.in);
  20.         PrintWriter printWriter = new PrintWriter(System.out);
  21.         int min,minIndex;
  22.         int n=sc.nextInt();
  23.         //инициализация
  24.         arr=new int[n][n];
  25.  
  26.         dist=new int[n];
  27.         for (int i=0;i<n;i++)
  28.             dist[i]=INF;
  29.  
  30.         noUsed=new boolean[n];
  31.         for (int i=0;i<n;i++)
  32.         {
  33.             noUsed[i]=true;
  34.         }
  35.  
  36.  
  37.         int price[]=new int[n];// массив цен на бензин
  38.         for (int i=0;i<n;i++)
  39.             price[i]=sc.nextInt();
  40.  
  41.         int m;//колличество дорог
  42.         m=sc.nextInt();
  43.         int i1,j1;
  44.         //заполним матриу смежности
  45.         for (int ind=0;ind<m;ind++){
  46.             i1=sc.nextInt();
  47.             j1=sc.nextInt();
  48.             i1--;
  49.             j1--;
  50.             arr[i1][j1]=price[i1];
  51.             arr[j1][i1]=price[j1];
  52.         }
  53.  
  54.         for (int i=0;i<n;i++)
  55.          for (int j=0;j<n;j++) {
  56.              if(arr[i][j]==0) arr[i][j]=-1;
  57.          }
  58.         for (int i=0;i<n;i++)
  59.             arr[i][i]=0;
  60.  
  61.         //алгоритм дейстры
  62.         dist[0] = 0;//расстояние до стартовой вершины равно 0
  63.         int minindex,temp;
  64.         do {
  65.             minindex = 10000;//индекс след вершины
  66.             min = 10000;//значение для поиска след вершины
  67.             for(int i=0; i<n;i++) {
  68.                 if((noUsed[i] == true) && (dist[i]<min)) {
  69.                     min = dist[i];
  70.                     minindex = i;
  71.                 }
  72.             }
  73.             if(minindex != 10000) {
  74.                 for(int i=0;i<n;i++) {
  75.                     if(arr[minindex][i] > 0) {
  76.                         temp = min+arr[minindex][i];
  77.                         if(temp < dist[i])
  78.                             dist[i] = temp;
  79.                     }
  80.                 }
  81.                 noUsed[minindex] = false;
  82.             }
  83.         } while(minindex < 10000);
  84.         for (int i=0;i<n;i++)
  85.         {if (dist[i]==INF) dist[i]=-1;}
  86.         System.out.print(dist[n-1]);
  87.         }
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement