void apsp(int *shortest, int *distance, int numOfCity);
shortest (Ãâ·Â) ÃÖ´Ü °Å¸®°¡ µé¾î°¡ ÀÖ´Â ¹è¿ distance (ÀÔ·Â) ½Ã¿Í ½Ã¿ÍÀÇ Á÷Á¢ °Å¸® numOfCity (ÀÔ·Â) ½ÃÀÇ ¼ö
¾øÀ½
distance[0] ½Ã 1À¸·ÎºÎÅÍ ½Ã 1±îÁö(ÀÚ±â Àڽſ¡°Ô)ÀÇ °Å¸®
distance[1] ½Ã 1À¸·ÎºÎÅÍ ½Ã 2±îÁöÀÇ °Å¸®
distance[numOfCity-1] ½Ã 1À¸·ÎºÎÅÍ ½Ã n±îÁöÀÇ °Å¸®
distance[numOfCity] ½Ã 2·ÎºÎÅÍ ½Ã 1±îÁöÀÇ °Å¸®
distance[numOfCity+1] ½Ã 2·ÎºÎÅÍ ½Ã 2(ÀÚ±â Àڽſ¡°Ô)ÀÇ °Å¸®
µÈ´Ù. Áï, numOfCity ºÐÀÇ ¹è¿ ¿ä¼Ò ¸¶´Ù, ¾î´À ½Ã·ÎºÎÅÍ ´Ù¸¥ ¸ðµÎ
ÀÇ ½Ã¿¡ÀÇ °Å¸®°¡ distance ¹è¿¿¡ µé¾î°¡ ÀÖ´Ù.
»ç¿ë¹ýÀÔ´Ï´Ù¸¸, ¿ì¼± µ¥ÀÌÅÍ ÆÄÀÏÀ» ÁغñÇØ µÐ´Ù. ½ÃÀÇ ¼ö¸¦ µ¥ÀÌÅÍ ÆÄÀÏÀÇ 1Çà°¿¡ ¾´´Ù. 2Çà°ºÎÅÍ´Â 1Çà ¸¶´Ù °¢ ½Ã°£ÀÇ °Å¸®¸¦ ¾´´Ù. 2 ÀÌÄ¡¸¶ÀÇ Á÷Á¢ °æ·Î°¡ ¾øÀ» ¶§´Â, ¹«ÇÑ´ëÀÇ »ý°¢À¸·Î Å« ¼ýÀÚ(¿¹¸¦ µé¾î 20000)À» »ç¿ëÇÑ´Ù.
3 <-- ½ÃÀÇ ¼ö
0 <-- ½Ã 1À¸·ÎºÎÅÍ ½Ã 1(ÀÚ±â ÀÚ½Å)¿¡ÀÇ °Å¸®
20 <-- ½Ã 1À¸·ÎºÎÅÍ ½Ã 2¿¡ÀÇ °Å¸®
20000 <-- ½Ã 1À¸·ÎºÎÅÍ ½Ã 3¿¡ÀÇ °Å¸®(Á÷Á¢ °æ·Î°¡ ¾ø±â ¶§¹®¿¡, ¹«ÇÑ´ë)
20 <-- ½Ã 2·ÎºÎÅÍ ½Ã 1¿¡ÀÇ °Å¸®
0 <-- ½Ã 2·ÎºÎÅÍ ½Ã 2(ÀÚ±â ÀÚ½Å)¿¡ÀÇ °Å¸®
10 <-- ½Ã 2·ÎºÎÅÍ ½Ã 3¿¡ÀÇ °Å¸®
25 <-- ½Ã 3À¸·ÎºÎÅÍ ½Ã 1¿¡ÀÇ °Å¸®(ÆíÅëÇàÀÇ ±æÀº ÀÖ´Ù)
10 <-- ½Ã 3À¸·ÎºÎÅÍ ½Ã 2¿¡ÀÇ °Å¸®
0 <-- ½Ã 3À¸·ÎºÎÅÍ ½Ã 3(ÀÚ±â ÀÚ½Å)¿¡ÀÇ °Å¸®
±×¸®°í µ¥ÀÌÅÍ ÆÄÀÏÀ» ¾´´Ù. ´ÙÀ½¿¡, ¿ë·Ê ÇÁ·Î±×·¥Àº
void apsp(int *shortest, int *distance, int numOfCity){
int i, j, k;
int *s, *d;
int x;
s = shortest;
d = distance;
for (i = 0; i < numOfCity; i++)
for (j = 0; j < numOfCity; j++) {
*s++ = (j ! = i) ? *d : 0;
d++;
}
for (k = 0; k < numOfCity; k++) {
s = shortest;
for (i = 0; i < numOfCity; i++)
for (j = 0; j < numOfCity; j++) {
if (*s > (x = *(shortest + i*numOfCity + k)
+ *(shortest + k*numOfCity + j)))
*s = x;
s++;
}
}
}
½Ã ´ë½Å¿¡ ¿ªÀ» »ý°¢ÇØ °Å¸® ´ë½Å¿¡ Àüö´ë¸¦ »ý°¢Çϸé(ÀÚ), ÀÌ ¹®Á¦´Â ¿ª¿¡¼ ¿ª±îÁöÀÇ ÃÖÀú ȯ½Â Àüö ¿îÀÓÀ» ¿ä±¸ÇÏ´Â ¹®Á¦°¡ µÈ´Ù. µû¶ó¼, ÀÀ¿ë¹üÀ§´Â ½Ç·Î ³Ð´Ù. ÃÖ±ÙÀÇ Ä«³»ºñ°ÔÀ̼ǵµ ±× ÀÏ·ÊÀÏ °ÍÀÌ´Ù.