Djikstra를 배우고 있는데 Djikstra와는 약간 다른 아이디어를 바탕으로 아래 코드를 준비했습니다. 이제 많은 웹 사이트에서 Extract min 및 boolean 배열을 방문 가장자리로 사용했습니다. 나는 아무 것도 사용하지 않았고 나의 대답도 정확합니다. 내 고의가 작동하지 않는 테스트 케이스 또는 시나리오가 있습니까?Djikstra의 최단 경로 알고리즘
import java.util.*;
class ShortestPath2
{
static int Ar[][];
static int dist[];
static int nodes;
public static void djikstra(int source)
{
LinkedList<Integer> list=new LinkedList<Integer>();
dist[source]=0;
list.add(source);
while(!list.isEmpty())
{
source=list.removeFirst();
for(int i=0;i<nodes;i++)
{
if(Ar[source][i]!=0)
{
if(dist[i]>dist[source]+Ar[source][i])
{
dist[i]=Math.min(dist[i],dist[source]+Ar[source][i]);
list.add(i);
}
}
}
}
System.out.println(Arrays.toString(dist));
}
public static void main(String[] args)
{
nodes=9;
Ar=new int[nodes][nodes];
dist=new int[nodes];
Arrays.fill(dist,Integer.MAX_VALUE);
Ar=new int[][]{{0, 4, 0, 0, 0, 0, 0, 8, 0},
{4, 0, 8, 0, 0, 0, 0, 11, 0},
{0, 8, 0, 7, 0, 4, 0, 0, 2},
{0, 0, 7, 0, 9, 14, 0, 0, 0},
{0, 0, 0, 9, 0, 10, 0, 0, 0},
{0, 0, 4, 14, 10, 0, 2, 0, 0},
{0, 0, 0, 0, 0, 2, 0, 1, 6},
{8, 11, 0, 0, 0, 0, 1, 0, 7},
{0, 0, 2, 0, 0, 0, 6, 7, 0}
};
djikstra(0);
}
}
당신은 아마 오히려 스택 오버 플로우보다 코드 검토에 게시한다) 코드를 종료 : http://codereview.stackexchange.com/ –
@JohnColeman 그들은 ' 심장 마비가있을거야! OP : ** ** 코드 형식을 올바르게 지정하는 방법에 대해 알아보십시오 **. 이것은 읽을 수 없습니다. 그것은 제대로 작동합니까? 방문한 노드를 추적하기 위해 연결된 목록을 사용하고있는 것처럼 보이지만 각 반복마다 방문한 노드 집합에서 가장 짧은 홉을 안정적으로 선택하는 방법은 무엇입니까? 어떤 경우에도 연결된 목록은이 작업에 대한 잘못된 데이터 구조입니다. 최소 힙을 사용하면 큰 데이터 세트에서 코드가 몇 배 빠르게 실행됩니다. –
@Tempux 아, 이제 알겠습니다. 그리고 나는 두통을 느끼고 있습니다. 나는 여기에서 벗어났다. ... –