public void Kruskal()
{
int row, col;
ArrayList work = new ArrayList();
PriorityQueue pq;
Set set = new Set(m_Size); // Embedded class below
clearFlags();
for ( row = 0; row < m_Size; row++ )
for ( col = row+1; col < m_Size; col++ )
if ( m_Road[row][col] != null )
work.add(new WtEdge(new CPair(row, col),
m_Road[row][col].m_Distance));
pq = new PriorityQueue(work);
while ( m_NextEdge < m_Size-1 && !pq.isEmpty() )
{
WtEdge current = pq.remove();
CPair edge = current._item;
int src = edge.m_First,
dst = edge.m_Second;
int set1 = set.find(src),
set2 = set.find(dst);
if ( set1 == set2 )
continue;
m_Sequence[m_NextEdge++] = edge;
set.union(set1, set2);
}
}
우선순위큐 이용하면 쉽게 짤수 있음
올ㅋ