나는 다음과 같은 방향 그래프 나타내는 100 × 100 인접 행렬에 대한 코드 작성했습니다 : 내가 가장 짧은 찾기 위해 플로이드 - 워셜 알고리즘을 사용하려고 시도하고있어플로이드 - 워셜 알고리즘 구현
을 그래프에서 파란색 노드의 모든 쌍에 대한 경로. 선택한 노드에 대한 모든 쌍의 최단 경로 만 찾는 방법은 무엇입니까?
public class AdjacencyMatrix
{
public static final int NUM_NODES = 100;
public static final int INF = Integer.MAX_VALUE;
public static boolean even(int num)
{
return num%2==0;
}
public static boolean odd(int num)
{
return num%2==1;
}
public static void initialize(int [][] adjMat, int N)
{
for(int i = 0; i < N; i++)
for(int j = 0; j <N; j++)
adjMat[i][j]=INF;
for(int x = 0; x<N; x++)
{
int row = x/10;
int column = x%10;
if (even(row)) {
if (column!=9)
adjMat[x][x+1]=1;
}
if (odd(row)) {
if (column!=0)
adjMat[x][x-1]=1;
}
if (even(column)){
if (row!=9)
adjMat[x][x+10]=1;
}
if (odd(column)) {
if (row!=0)
adjMat[x][x-10]=1;
}
}
}
public void floydWarshall(int[][] adjMat, int N)
{
\t adjMat = new int[N][N];
\t initialize(adjMat, NUM_NODES);
for(int k = 0; k < N; ++k) {
for(int i = 0; i < N; ++i) {
for(int j = 0; j < N; ++j) {
adjMat[i][j] = Math.min(adjMat[i][j], adjMat[i][k] + adjMat[k][j]);
}
}
}
}
public static void main(String[] args)
{
int adjMat[][] = new int[NUM_NODES][NUM_NODES];
initialize(adjMat, NUM_NODES);
int A,B,C,D,E,F,G,H,I,W;
A = 20;
B = 18;
C = 47;
D = 44;
E = 53;
F = 67;
G = 95;
H = 93;
I = 88;
W = 66;
System.out.println(adjMat[A][B]);
System.out.println();
}
}
그것은 당신이 취소 한처럼 보이지 않는 : 그렇다면
다음 단계는 루프를 INF에 평등에 대한 adjMat [I] [K]와 adjMat [K] [J]를 선택하고 계속하는 것입니다 아무것도. – Nate