void dijkstra(int n, const number W[][], set_of_edges& F)
{
index i, vnear;
edge e;
index touch[2..n];
number length[2..n];
F = None
for(i = 2; i <= n; ++i)
{
touch[i] = 1;
length[i] = W[1][i];
}
repeat(n-1 times)
{
min = inf;
for(i=2; i<=n; ++i)
if(0<=length[i] < min)
{
min = length[i];
vnear = i;
}
e = (touch[vnear], vnear);
e 를 F에 추가
for(i=2; i<=n; ++i)
if(length[vnear] + W[vnear][i] < length[i]) //기존의 최단거리보다 새롭게 업데이트 된 거리가 짧을 때
{
length[i] = length[vnear]+W[vnear][i];
touch[i] = vnear;
}
length[vnear] = -1;
}
}
length[vnear] + w[vnear][i] < length[i]
1) 비싼 물건부터 넣기
2) 가벼운 것 부터 넣기
3) 무게당 가치가 가장 높은 것 부터 넣기
가중치 x
가중치 o
find
path compression