[질문]자바로 구현한 다익스트라 알고리즘에 관한 질문입니다
소라
import java.io.*;
public class ShortPath{
//int MAX=100000;
public void floyd(int n,int W[][],int D[][],int P[][])
{
int i,j,k;
for(i=1;in;i++)
for(j=1;jn;j++)
{ D[i][j]=W[i][j];}
for(i=1;in;i++)
for(j=1;jn;j++)
{
P[i][j]=0;
}
for(k=1;k=n;k++)
for(i=1;i=n;i++)
for(j=1;j=n;j++)
if(D[i][k]+D[k][j]D[i][j])
{
P[i][j]=k;
D[i][j]=D[i][k]+D[k][j];
}
}
public void path(int q,int r,int P[][])
{
if (P[q][r] != 0)
{
path(q, P[q][r], P);
System.out.println( - );
System.out.println(v+P[q][r]);
path(P[q][r], r, P);
}
}
public static void main(String[] arg)
{
int MAX=100000;
int W[][] = { {0,1,MAX,1,5},
{9,0,3,2,MAX},
{MAX,MAX,0,4,MAX},
{MAX,MAX,2,0,3},
{3,MAX,MAX,MAX,0}
};
int D[][] = new int[5][5];
int P[][] = new int[5][5];
floyd(5, W[5][5], D[5][5], P[5][5]);
int i, j;
//비중행렬 출력
System.out.println();
System.out.println();
System.out.println(W ----- );
for (i = 0; i 6; i++)
{
for (j = 0; j 6; j++)
System.out.print( );
System.out.println(W[i][j]);
}
//D행렬 출력
System.out.println(D ----- );
for (i = 0; i 6; i++)
{
for (j = 0; j 6; j++)
System.out.print( );
System.out.println(D[i][j]);
}
//P행렬 출력
System.out.println(P ----- );
for (i = 0; i 6; i++)
{
for (j = 0; j 6; j++)
p; System.out.print( );
System.out.println(P[i][j]);
}
System.out.println(시작점과 종점을 입력하시오.(0-4));
System.out.println(시작점 : );
BufferedReader reader= new BufferedReader(new InputStreamReader(System.in),1);
try
{
String line= reader.readLine();
int sstart= Integer.parseInt(line);
System.out.println(종 점 : );
line = reader.readLine();
int eend = Integer.parseInt(line);
System.out.println(최단경로 : );
System.out.println(sstart);
path(sstart, eend, P);
System.out.println( - );
System.out.println(최단거리 : +D[sstart][eend]);
}
catch(IOException e)
{
System.out.println(e);
}
}
}
==============================================================
ShortPath.java:59: floyd(int,int[][],int[][],int[][]) in ShortPath cannot be app
lied to (int,int,int,int)
floyd(5, W[5][5], D[5][5], P[5][5]);
^
ShortPath.java:105: non-static method path(int,int,int[][]) cannot be referenced
from a static context
path(sstart, eend, P);
^
2 errors이런 에러가 뜨는데 왜 그런지 궁금하네요...도움을 주세용^^
-
부루
ㅋㅋ 그렇죠...쪼금 민망하죠..ㅎㅎ
-
튼동
아니, 이것은 java를 가장한 C Language 가 아니오..? ^^
-
귀1여운렩
헛 수정하셨나봐염 =_=;; 췟 열심히 해서 올렸는데 아쉽다는 으하하 좋은 하루 되세요^^*
-
알찬바로
ㅎㅎ짐 수정하고 있습니다. 답변 감사합니다^^ 좋은 하루 보내세요~
-
강아지
아니구나 죄송해염 =_=;;
-
그린나래
아닌가? 아니면 혹시 =_= ;; 5라는 값때문이 아닐까요? int i[5]; 라는 분은 [0]~[4] 까지 있는건데 for문에서 1부터 5까지 돌리는 듯 하네요^^;
-
남은
음.. D[5][5], P[5][5] 이 두분의 값이 널이네요^^ 이분 값부터 넣어드려야 할듯 ㅎㅎ
두번째도 P[5][5] 이분의 값이 선언되지 않은듯 합니다^^