Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class Qwer {
- public static void main(String args[])
- {
- Scanner sc=new Scanner(System.in);
- //инициализация
- int n,start,end;
- Stack<Integer> q=new Stack<Integer>();
- n=sc.nextInt();
- int arr[][]=new int[n][n];//матрица смежности
- int d[]=new int[n];//массив расстояний
- boolean mark[]= new boolean[n];//отметки пройденных вершин
- ArrayList<Integer> AdjList[]=new ArrayList[n];
- for (int i=0;i<n;i++)
- {
- AdjList[i]=new ArrayList<Integer>();
- }
- //ввод исходных
- for (int i=0;i<n;i++)
- for(int j=0;j<n;j++)
- arr[i][j]=sc.nextInt();
- for (int i=0;i<n;i++)
- for (int j=0;j<n;j++)
- {
- if (arr[i][j]!=0) AdjList[i].add(j);
- }
- start=sc.nextInt();
- start--;
- end=sc.nextInt();
- end--;
- //
- mark[start]=true;
- q.push(start);
- while (!q.empty())
- {
- int v=q.pop();
- for(int i=0;i<AdjList[v].size();i++)
- {
- if (mark[AdjList[v].get(i)]==false)
- {
- d[AdjList[v].get(i)]=d[v]+1;
- mark[AdjList[v].get(i)]=true;
- q.push(AdjList[v].get(i));
- }
- }
- }
- System.out.println(d[end]);
- //раскрутка пути
- int v=end,dist=d[end];//v-текущая вершина
- int way[]=new int[dist];//массив для записи пути
- int wayInd=dist-1;//итерратор массива
- while(wayInd>=0)
- {
- for (int i=0;i<AdjList[v].size();i++)
- {
- if (d[AdjList[v].get(i)]==dist-1) {
- way[wayInd]=v;
- v = AdjList[v].get(i);
- dist--;
- wayInd--;
- break;
- }
- }
- }
- //вывод пути
- System.out.print((start+1)+" ");
- for (int i=0;i<d[end];i++) {
- System.out.print((way[i]+1) + " ");
- }
- System.out.println();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement