Floyd -Warshall Algorithm

๊น€ํ† ๋ฆฌยท2025๋…„ 1์›” 9์ผ

์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ชฉ๋ก ๋ณด๊ธฐ
26/27

๐Ÿ“Œ Floyd -Warshall Algorithm

๊ทธ๋ž˜ํ”„์—์„œ ๋ชจ๋“  ์ •์  ์Œ ๊ฐ„์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ํ•œ ๋ฒˆ์— ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ๋‹ค์ต์ŠคํŠธ๋ผ(Dijikstra) ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํ•œ ์ •์ ์—์„œ ๋‹ค๋ฅธ ๋ชจ๋“  ์ •์ ๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, Floyd-Warshall์€ ๋ชจ๋“  ์ •์  ์Œ์— ๋Œ€ํ•œ ์ตœ๋‹จ ๊ฒฝ๋กœ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
(์Œ์ˆ˜ ์‚ฌ์ดํด์ด ์—†๋‹ค๋Š” ๊ฐ€์ • ํ•˜์— ์Œ์ˆ˜ ๊ฐ€์ค‘์น˜๊ฐ€ ์žˆ์–ด๋„ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ )

# V๋Š” ์ •์ ์˜ ๊ฐœ์ˆ˜
# dist[i][j]๋Š” ์ •์  i์—์„œ j๋กœ ๊ฐ€๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
for k in range(V):
    for i in range(V):
        for j in range(V):
            if dist[i][k] + dist[k][j] < dist[i][j]:
                dist[i][j] = dist[i][k] + dist[k][j]

โžก๏ธ ์‹œ๊ฐ„ ๋ณต์žก๋„: O(Vยณ)

๐Ÿงน ์ •๋ฆฌ
1) ์ •์ ๋“ค์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ ๊ฐ€์ค‘์น˜๋ฅผ ๋‹ด์„ 2์ฐจ์› ๋ฐฐ์—ดA์™€ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ฐ€์ค‘์น˜๋ฅผ ๋‹ด์„ 2์ฐจ์› ๋ฐฐ์—ดB๋ฅผ ์„ ์–ธ
2) 3์ค‘ for๋ฌธ์„ ํ†ตํ•ด ์งํ†ต(i,j)์œผ๋กœ ๊ฐ€๋Š” ๋ฐฉ๋ฒ•๊ณผ (i,k)์—์„œ (k,j)๋กœ ๊ฐ€๋Š” ๋ฐฉ๋ฒ• ์ค‘ ๊ฐ€์ค‘์น˜๊ฐ€ ๋” ์ž‘์€ ์ˆ˜๋กœ B๋ฐฐ์—ด์„ ์—…๋ฐ์ดํŠธ ํ•œ๋‹ค.

11403 ๊ฒฝ๋กœ์ฐพ๊ธฐ
์œ„ ๋ฌธ์ œ์—์„œ๋Š” ๊ฐ€์ค‘์น˜๊ฐ€ ์•„๋‹Œ, ๋‹จ์ง€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์Œ์„ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— 0 ๋˜๋Š” 1๋กœ ์—ฌ๋ถ€๋ฅผ ๋‹ด์•„์ค€๋‹ค.


#include <iostream>
#include <string>
#include <queue>

#define MAX 101
using namespace std;
struct node{
  int x,y;
};
int dir[4][2]={
  0,1,
  1,0,
  0,-1,
  -1,0
};
int N ; 
int map[MAX][MAX];

void floydWarshall(int x, int y){
  
  int result[N+1][N+1] = {0};
  
  for(int i = 1 ; i <= N ; i ++ ){
      for(int j = 1 ; j <= N ; j ++ ){
        result[i][j] = map[i][j];
      }
  }
  
  
  for(int k = 1 ; k <= N ; k ++ ){
    for(int i = 1 ; i <= N ; i ++ ){
      for(int j = 1 ; j <= N ; j ++ ){
        if(result[i][k]  + result[k][j] > 1 )
            result[i][j] = 1 ;
      }
    }
  }
  
  for(int i = 1 ; i <= N ; i ++ ){
      for(int j = 1 ; j <= N ; j ++ ){
        cout<<result[i][j]<<" ";
      }
      cout<<'\n';
  }
}

int main() 
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    
    cin >> N;
    
    for(int i = 1 ; i <= N ; i ++ ){
        for(int j = 1 ; j <= N ; j ++ ){
          cin>>map[i][j];
        }
    }
  

    floydWarshall(0,0);

   
    return 0;
}

๋ฐฑ์ค€ ์ฐธ๊ณ  ๋ฌธ์ œ:
์ผ€๋นˆ ๋ฒ ์ด์ปจ์˜ 6๋‹จ๊ณ„ ๋ฒ•์น™
ํ”Œ๋กœ์ด๋“œ
ํ‚ค ์ˆœ์„œ

profile
์›น ๊ฐœ๋ฐœํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ ๋ถ„์„, AI ๊ณต๋ถ€ํ•˜๋Š” jinveloper

0๊ฐœ์˜ ๋Œ“๊ธ€