import java.io.*; public class Subway { public static void main( String [] arg ) throws Exception { //메인메소드 , 예외문 활용.(이것도 다시 ㅜ)
int m = 10000; int s,e; int i,j,k=0,min; int [] v = new int[8]; int [] distance = new int[8]; int [] via = new int[8]; int [][] data = { {0,1,m,m,m,m,m,m}, {1,0,1,1,m,m,m,m}, {m,1,0,m,1,m,m,m}, {m,1,m,0,m,1,m,m}, {m,m,1,m,0,1,m,1}, {m,m,m,1,1,0,1,m}, {m,m,m,m,m,1,0,m}, {m,m,m,m,1,m,m,m} }; BufferedReader br = new BufferedReader( new InputStreamReader( System.in )); //BuggeredReader가 뭐하는거야 -_-알아보자... System.out.print(" 출발역을 입력하세욧! : "); s = Integer.parseInt(br.readLine()); //니도 도대체 뭐하는거냐..? System.out.print(" 도착역을 입력하세욧! : "); e =Integer.parseInt(br.readLine()); //니놈은 도대체 뭐야? for( j=0; j<8; j++ ) { v[j] = 0; distance[j] = m; }
distance[s-1] = 0; for( i=0; i<8; i++ ) { min = m; for( j=0; j<8; j++ ) { if( v[j] == 0 && distance[j] < min ) { k = j; min = distance[j]; } } v[k] = 1; if(min==m) break;
for(j=0; j<8; j++) { if(distance[j] > distance[k] + data[k][j]) { distance[j] = distance[k] + data[k][j]; via[j]=k; } } } System.out.printf("\n %d에서 출발하여, %d로 가는 최단 거리는 %d입니다.\n", s, e, distance[e-1]); int path[] = new int[8]; int path_cnt=0; k=e-1; while(true) { path[path_cnt++]=k; if(k==s-1)break; k=via[k]; } System.out.print(" 경로는 : "); for(i=path_cnt-1;i>=1;i--) { System.out.printf("%d -> ",path[i]+1); } System.out.printf("%d입니다",path[i]+1); } }
이 소스 입니다.
s값을 받아서 k,j값을 지지고 볶아서 data 배열에 s값의 위치를 넣는것 까지는 해석했습니다 (틀린가요 ㅠㅜㅜ?)