Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- http://prog-cpp.ru/deikstra/
- import java.util.ArrayList;
- import java.util.Scanner;
- import java.io.PrintWriter;
- import static javafx.scene.input.KeyCode.V;
- /**
- * Created by Сергей on 27.05.2016.
- */
- public class Solution321 {
- public static void main(String Args[]){
- int INF = Integer.MAX_VALUE / 2;
- int arr [][];
- int dist[]; //массив для хранения расстояния от стартовой вершины
- boolean noUsed[]; //массив для хранения информации о пройденных и не пройденных вершинах
- int start,end; //стартовая,конечная вершины, от которой ищется расстояние до всех других
- Scanner sc=new Scanner(System.in);
- PrintWriter printWriter = new PrintWriter(System.out);
- int min,minIndex;
- int n=sc.nextInt();
- start=sc.nextInt();
- end=sc.nextInt();
- start--;
- end--;
- //инициализация
- arr=new int[n][n];
- dist=new int[n];
- for (int i=0;i<n;i++)
- dist[i]=INF;
- noUsed=new boolean[n];
- for (int i=0;i<n;i++)
- {
- noUsed[i]=true;
- }
- //ввод матрицы смежности
- for (int i=0;i<n;i++)
- for (int j=0;j<n;j++) {
- arr[i][j]=sc.nextInt();
- }
- //алгоритм дейстры
- dist[start] = 0;//расстояние до стартовой вершины равно 0
- int minindex,temp;
- do {
- minindex = 10000;//индекс след вершины
- min = 10000;//значение для поиска след вершины
- for(int i=0; i<n;i++) {
- if((noUsed[i] == true) && (dist[i]<min)) {
- min = dist[i];
- minindex = i;
- }
- }
- if(minindex != 10000) {
- for(int i=0;i<n;i++) {
- if(arr[minindex][i] > 0) {
- temp = min+arr[minindex][i];
- if(temp < dist[i])
- dist[i] = temp;
- }
- }
- noUsed[minindex] = false;
- }
- } while(minindex < 10000);
- for (int i=0;i<n;i++)
- {if (dist[i]==INF) dist[i]=-1;}
- System.out.print(dist[end]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement