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++; } } }
½Ã ´ë½Å¿¡ ¿ªÀ» »ý°¢ÇØ °Å¸® ´ë½Å¿¡ Àüö´ë¸¦ »ý°¢Çϸé(ÀÚ), ÀÌ ¹®Á¦´Â ¿ª¿¡¼ ¿ª±îÁöÀÇ ÃÖÀú ȯ½Â Àüö ¿îÀÓÀ» ¿ä±¸ÇÏ´Â ¹®Á¦°¡ µÈ´Ù. µû¶ó¼, ÀÀ¿ë¹üÀ§´Â ½Ç·Î ³Ð´Ù. ÃÖ±ÙÀÇ Ä«³»ºñ°ÔÀ̼ǵµ ±× ÀÏ·ÊÀÏ °ÍÀÌ´Ù.