{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm-Analysis/2020-05-29-알고리즘-Floyd-Warshall/","result":{"data":{"site":{"siteMetadata":{"title":"Hun's Footsteps 🥷","author":"전여훈","siteUrl":"https://jeonyeohun.netlify.app","comment":{"disqusShortName":"","utterances":"jeonyeohun/jeonyeohun.github.io"},"sponsor":{"buyMeACoffeeId":"jeonyeohun"}}},"markdownRemark":{"id":"70338715-54a4-5ad0-8584-a4cc09909c2a","excerpt":"All Pairs Shortest Path 지금까지 다뤘던 다익스트라 알고리즘이나 벨만포드 알고리즘은 모두 하나의 정점으로부터 다른 모든 정점까지의 최단거리를 구하는  문제를 풀기위한 알고리즘이었다. 오늘 소개할 플로이드-워셜 알고리즘은 그래프에 있는 모든 모든 정점에 대해 각 정점들이 다른 정점들까지 도달하기 위해 필요한 모든 최단 거리를 구하는 문제이다. Concept 알고리즘의 원리는 단순하다. 어떤 정점 X로부터 Y…","html":"<h2 id=\"all-pairs-shortest-path\" style=\"position:relative;\"><a href=\"#all-pairs-shortest-path\" aria-label=\"all pairs shortest path permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>All Pairs Shortest Path</h2>\n<p>지금까지 다뤘던 다익스트라 알고리즘이나 벨만포드 알고리즘은 모두 하나의 정점으로부터 다른 모든 정점까지의 최단거리를 구하는 <code class=\"language-text\">Single source Shortest Path(SSP)</code> 문제를 풀기위한 알고리즘이었다. 오늘 소개할 플로이드-워셜 알고리즘은 그래프에 있는 모든 모든 정점에 대해 각 정점들이 다른 정점들까지 도달하기 위해 필요한 모든 최단 거리를 구하는 문제이다.</p>\n<h2 id=\"concept\" style=\"position:relative;\"><a href=\"#concept\" aria-label=\"concept permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Concept</h2>\n<p>알고리즘의 원리는 단순하다. 어떤 정점 X로부터 Y까지의 최단거리를 구하기 위해서 중간에 거쳐갈 수 있는 모든 정점들을 확인해보고 그 중 최단 거리를 만드는 경로를 찾는 것이다. 다음 수식을 보자.</p>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 910px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 23.666666666666668%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAFCAYAAABFA8wzAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAwklEQVQY041Qyw6DMAzj//9xHAZFA1oeBcroy0sC7DgtkpXUTR03Ba7Y1g2LXZBTRgwJKf7C2dO+WozDiMEMMNrIXcHk8T6E0Frj30gpQfca0zhhJCilLsG2g9scOsrVs8JAE1WtqNlI3agG67KKE65ZIIRADuNX0FqLeZoRfEBxT7SzRfko0XU96kphd7u4ZvjDy/e4dsR77xFjFBOaOB7G7yM7ZFV+wJkj50yAOEi0T/4G17JbEmEEOnO/9KYTN/cBkkWDpjl+7tIAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"1\"\n        title=\"1\"\n        src=\"/static/2d202510d120cf173b94f7211693bdc0/c6bbc/1.png\"\n        srcset=\"/static/2d202510d120cf173b94f7211693bdc0/5a46d/1.png 300w,\n/static/2d202510d120cf173b94f7211693bdc0/0a47e/1.png 600w,\n/static/2d202510d120cf173b94f7211693bdc0/c6bbc/1.png 910w\"\n        sizes=\"(max-width: 910px) 100vw, 910px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>여기서 d<sub>ij</sub><sup>(k)</sup> 은 1부터 k 까지의 정점들을 거쳐가는 경로 중 최단 경로의 길이를 나타낸다. 최단 경로를 구하기 위해서는 두 가지의 경우를 생각해 볼 수 있다.</p>\n<h3 id=\"k--0\" style=\"position:relative;\"><a href=\"#k--0\" aria-label=\"k  0 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>k = 0</h3>\n<p>d<sub>ij</sub><sup>(0)</sup> 은 아무곳도 거쳐오지 않고 정점 i 에서 정점 j까지 곧바로 이동한 경우를 의미한다. 그리고 이것을 다르게 표현하면, 정점 i와 j 사이의 간선거리를 의미하기 때문에 우리는 w<sub>ij</sub> 라고도 표현할 수 있을 것이다.</p>\n<h3 id=\"k--1\" style=\"position:relative;\"><a href=\"#k--1\" aria-label=\"k  1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>k > 1</h3>\n<p>k 가 0보다 크다는 것은 i 부터 j까지 가는 길에 경유할 수 있는 정점이 있다는 것을 의미한다. 이 경우에는 ij의 길이와 i 에서 k 까지의 길이와 k부터 j 까지의 길이의 합을 구해서 더 값이 작은 것을 최단경로의 길이로 정한다.</p>\n<h2 id=\"implementation---on3\" style=\"position:relative;\"><a href=\"#implementation---on3\" aria-label=\"implementation   on3 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Implementation - O(N^3)</h2>\n<p>플로이드 와샬 알고리즘은 2차원 배열을 만들어서 DP로 접근한다. 배열의 각 요소는 i 와 j 사이에 계산된 최소의 비용을 저장한다. 각 정점에 대해서 모든 정점에 대해 거쳐가는 비용을 계산해야하기 떼문에 3중으로 중첩된 for 문을 통해서 계산을 수행한다.</p>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token function\">Floyd_Warshall</span><span class=\"token punctuation\">(</span>w<span class=\"token punctuation\">,</span> n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;=</span> n <span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> j <span class=\"token operator\">=</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">;</span> j <span class=\"token operator\">&lt;=</span> n <span class=\"token punctuation\">;</span> j<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>i <span class=\"token operator\">==</span> j<span class=\"token punctuation\">)</span> d<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 자기 자신에 대한 거리는 0으로 초기화</span>\n            <span class=\"token keyword\">else</span> d<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> INF<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 이외의 정점은 무한대로 초기화</span>\n\n            d<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> w<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 입력받은 그래프의 간선정보로 최단거리를 초기화</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> k <span class=\"token operator\">=</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">;</span> k <span class=\"token operator\">&lt;=</span> n <span class=\"token punctuation\">;</span> k<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;=</span> n <span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> j <span class=\"token operator\">=</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">;</span> j <span class=\"token operator\">&lt;=</span> n <span class=\"token punctuation\">;</span> j<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>d<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>k<span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> d<span class=\"token punctuation\">[</span>k<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;</span> d<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n                d<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> d<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>k<span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> d<span class=\"token punctuation\">[</span>k<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// k를 거쳐서</span>\n                pred<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> k<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 경로 정보를 저장</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"example\" style=\"position:relative;\"><a href=\"#example\" aria-label=\"example permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Example</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 906px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 93%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAATCAYAAACQjC21AAAACXBIWXMAABYlAAAWJQFJUiTwAAACXklEQVQ4y4VUa3eiMBDl//+t1lrbftjT7na7rYrg1rWIPJJAgAB3Z2KxUVc353DITDJ3Xnfi4cLq+96VDnSHZ1/LOwc0GLRti+VGYb6WKHV9EewE0PU+7BnoalZj5Hd4DCU6cnDu7idgv1ceH/L65ue4JsBJ0GIyL1EU5Ukmrt0e0F1N06Cua1SVxvNbQEDaAj5OV9jGG3RdB601jjNnHG8AK0oNoQq758tJkkBXlZU38RbrKLbpMlie5/YbnGdCoSf9voYficKdX2KyaPC23EKXhROtsUZtayjiaq9nOU4yPPiSou/wvMzJWUuAPaUSKoxJeRf2uF9UNrqy5HoViOMYSZpCKoUoiqyO90rmePgZ4jYExjONq6lGrqpdhG8rQZ1sMFp0eJgmVL8KhtIzpkVKYMYYS58sy+yenUmRY/mRYbwwuJ63uJ1JKlG9A+RLQaTwskyxCJbYbmObqq1t8ZU+15ab5a6n1wCvK4VU7rrvuR1uTW3B+RNC2MK7ALzn6Nz6FkoedtklaUGXY+roMGhcMwZ2DViu68bK7JDL4GJ4Lin5r6jgwzTkWWqd7EB2kZbEgM40RJMWUkpLI5fc3vHYNU2N1Z81XoII02C1j46NDdHnI9rg2V/jPUrJsTmZbe94Hplzt79i3Pgtxj6Bx8JG03W97fg9seCG2DAiqqyJv8f2JxHmSlug8byyHPsRpBA58VAK+OG71U8CY0Fffot/R+gqeQKeQkGghrhVEB20nQDuPA/vdzq74TN6KOKsOA/oHrAxj6Ms9Ml7N5wJpT9t/hPh8ctz6WnbyYe6v8rAxVxcBXd1AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2\"\n        title=\"2\"\n        src=\"/static/b3f0e6c7cbc452efe0d2526094c40a07/6029f/2.png\"\n        srcset=\"/static/b3f0e6c7cbc452efe0d2526094c40a07/5a46d/2.png 300w,\n/static/b3f0e6c7cbc452efe0d2526094c40a07/0a47e/2.png 600w,\n/static/b3f0e6c7cbc452efe0d2526094c40a07/6029f/2.png 906w\"\n        sizes=\"(max-width: 906px) 100vw, 906px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>플로이드-워셜 알고리즘이 어떻게 적용되는지 위 그래프를 통해서 알아보자.</p>\n<h3 id=\"phase-1-k--0\" style=\"position:relative;\"><a href=\"#phase-1-k--0\" aria-label=\"phase 1 k  0 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 1 (k = 0)</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 63%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAANCAYAAACpUE5eAAAACXBIWXMAABYlAAAWJQFJUiTwAAABdElEQVQ4y42T6W6EMAyEef9HbP90i7Qs9024XT6zZqOqahvJyjg4zthjAuecrOsq+77/22z95AfzPMu2bdL3ve4YD3Rdd/nEDMOgmEtgzBKCx3E8Ey7LIs4NkueZ7hjJT9+pNU2t/jg6taZppG0b/eb70zRJsG2rMsrz/NgXWY8HeASGnGOWFGzVnBW9fGLAB8NZHRKeDJ0GFEWurxvjsiwUT9OouKpKLROfu2VZamsCY1FVlTIDQ50An2FdvxjC3mfYtq36+34wNHXI7ivpK29C+b4JZL7hgNe/S//bWPw5NlZiFEUXE3b654+NjReLdhRFoZgz7luFmhDJ39/ftOk0uq4rud1u2nAsyzIJw0/FfEcUDIzRf3o8zzo2mx6GYSgojjC8ZiLxneD7/X5VgAj+WDGH9mM8x2aQOH5cg9z3naRp4g1yfbBMFVMesY9H9KxgOqr5OOJTJRCYwgSYkvxKcRxfTYdNkiRX461UE4SWwJr1BUlT9yXLtbt6AAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"3\"\n        title=\"3\"\n        src=\"/static/7a49744f941a09a1b30cf1ed6cb20f80/c1b63/3.png\"\n        srcset=\"/static/7a49744f941a09a1b30cf1ed6cb20f80/5a46d/3.png 300w,\n/static/7a49744f941a09a1b30cf1ed6cb20f80/0a47e/3.png 600w,\n/static/7a49744f941a09a1b30cf1ed6cb20f80/c1b63/3.png 1200w,\n/static/7a49744f941a09a1b30cf1ed6cb20f80/d7e70/3.png 1286w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>먼저 그래프를 기반으로 두 개의 2차원 배열을 초기화 한다. 각 배열 요소 [i][j]는 i부터 j까지의 간선 정보를 의미한다. 배열 D는 현재까지 계산된 최단 거리를 저장하고, P는 해당 최단거리를 만드는 바로 이전 정점을 저장하게 된다.</p>\n<p>연결이 만들어있지 않은 정점끼리는 무한대로 표시하고, 이전 정점이 없는 경우에는 NIL로 표기한다.</p>\n<h3 id=\"phase-2-k--1\" style=\"position:relative;\"><a href=\"#phase-2-k--1\" aria-label=\"phase 2 k  1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 2 (k = 1)</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1034px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 70.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAABiElEQVQ4y62Ty3KDMAxF+f9fbFdpmpCU9yOAbXB9pCgwXXS6qGcYJCRdXeuKLIQQ13WNdrZti8dz9LF/8znZPM/Rex+XZRFgS8K3ZOecPHawIWLxY22G4dwS67qK4zhGGjwej1hVZZymKSXPse+72LaNxPDJ5Rs+T13XqWYUYhmdQvCSBID3Thp0XSdvYn3fJ8BWCohTDJAxH4ZBWIIlgBSWZSkMYTBNMKxSkTKkAEAFIbeQhoAQv93yVDvsDDG6rhUAOlLYNI0U4MNIGTvJBZzmxtDGIwxt0PaBwTJXQG3oJpoJhh/CLqBuitqZBsP/rY1d436/v+SnAQxtR+1qthpFUcgm2G1MEOzMrvf+/iZztDU5nU4iDslF8RUvl8+XCPi6RpM8CKiiOAWE4fl8lq6sCUoiCm/irNT1en2yV1HI1XH5p+LzvjY4rAJd6AizpqmfDGdhjq+LvaTmH9KEGPn7YieGNoc8z19KUohv/zgMmBvHRsRMTWHYw3bbVgX8qdxfVT36Zn8DQBRHoY2UHdEAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"4\"\n        title=\"4\"\n        src=\"/static/7a6ca9791e061ee3c6dc4c9df478d5dc/709cb/4.png\"\n        srcset=\"/static/7a6ca9791e061ee3c6dc4c9df478d5dc/5a46d/4.png 300w,\n/static/7a6ca9791e061ee3c6dc4c9df478d5dc/0a47e/4.png 600w,\n/static/7a6ca9791e061ee3c6dc4c9df478d5dc/709cb/4.png 1034w\"\n        sizes=\"(max-width: 1034px) 100vw, 1034px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>이제 모든 정점에 대해서 정점 1을 거쳤을 때의 거리를 계산해 기존 거리보다 짧다면 최단거리와 최단 경로로 업데이트 한다. 플로이드 알고리즘에서는 중간지점을 거쳐갔을 때의 거리를 확인해서 최단경로를 갱신하기 떄문에 모든 배열 요소에 대해서 다음과 같은 작업을 거쳐야한다.</p>\n<ol>\n<li>중간지점으로 선택한 k로 i 와 j를 이은 간선을 나눈다.</li>\n<li>이러면 간선 ik 와 kj 가 만들어지는데, 이 간선은 이미 테이블에 저장되어 있는 간선이기 때문에 두 값을 더해 경유했을 때의 거리를 구한다.(d[i][k] + d[k][j])</li>\n<li>현재 최단거리와 경유했을 때의 간선거리를 비교해서 더 작은 값으로 최단거리를 업데이트 한다.</li>\n</ol>\n<p>d[4][5]를 보면, k가 0이었을 때는 무한대 값이지만, k가 1일 때 1번 정점을 거쳐간다고 하면, <code class=\"language-text\">d[4][1]=2</code> 와 <code class=\"language-text\">d[1][5]=-4</code> 를 더해 -2 의 거리를 얻게되고 이 값은 무한대 값보다 작기 때문에 새로운 최단거리는 -2로 업데이트 된다.</p>\n<p>더불어서 새로운 최단거리가 생겼기 때문에 경로의 이전 정점을 저장하는 P 배열의 P[4][5] 도 경유한 1로 변경된다.</p>\n<p>또, d[4][2] 역시 무한대 였던 최단거리와, 1을 경유했을 때의 거리인 <code class=\"language-text\">d[4][1] + d[1][2] = 2 + 3 = 5</code> 가 4에서 바로 2로 가는 경로인 무한대보다 작기 때문에 새로운 값인 5로 업데이트 되고 경로 테이블에서도 NIL에서 1로 업데이트 된다.</p>\n<h3 id=\"phase-3-k--2\" style=\"position:relative;\"><a href=\"#phase-3-k--2\" aria-label=\"phase 3 k  2 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 3 (k = 2)</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1034px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 70.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAABf0lEQVQ4y6WU246DMAxE+f9f5K2VtlzLnQCBZnOcOqXVvlSLFGVMnPHgsUj2fXfHcTh9Ho/HG/4m5kmMMc7a3a3rGokpsm5bTNo83k4xueTABaHeBSeAZTGuae5unmePFzeOo8TgdV1c13WywCFuJYdzY2af28hurXUJlaiuBLxE9TAMgvfdur7v/OoF844zioNR17at5wiqhRCi+732SZMkBIWNYBRBxgJzkeKQEvN1ZVnK3UhIEiogRi0KQ9XNq9h8gUEWGFV8/jRNEkOKGHYhVLcgCY0NpkCuDp5N4R2kagIrGBRwQuJ/xubzEUJ6VRRFrKzNBrNUoarCED2XETvlytjQjzRN/T5KL+jf9XqNY3K7/fjGF08TFjFsGHrBmIFJcWwgpIISMBr0k8ar4jzPXVVVT0VW5hCVqo4J4AueLluxvq4rUQopY8Ol12C3b/HlcpEYspdCExSqa1mWye5bLdVRpU2v61oUByOOOF6cs2fZLTqdnJ379mfw19kvaX5HzwIu69QAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"5\"\n        title=\"5\"\n        src=\"/static/56093402a5d2a2088df3e16d4b79358a/709cb/5.png\"\n        srcset=\"/static/56093402a5d2a2088df3e16d4b79358a/5a46d/5.png 300w,\n/static/56093402a5d2a2088df3e16d4b79358a/0a47e/5.png 600w,\n/static/56093402a5d2a2088df3e16d4b79358a/709cb/5.png 1034w\"\n        sizes=\"(max-width: 1034px) 100vw, 1034px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>이제 정점 2번을 거쳐가는 모든 거리를 계산한다.</p>\n<ol>\n<li>d[1][4] 는 <code class=\"language-text\">d[1][2] + d[2][4] = 3 + 1 = 4</code> 가 기존 최단거리인 무한대 보다 작기 때문에 새로운 최단거리는 4 로 업데이트 된다.</li>\n<li>d[3][4] 는 <code class=\"language-text\">d[3][2] + d[2][4] = 4 + 1 = 5</code> 가 기존 최단 거리인 무한대 보다 작기 때문에 새로운 최단거리는 5 로 업데이트 된다.</li>\n<li>d[3][5] 는 <code class=\"language-text\">d[3][2] + d[2][5] = 4 + 7 = 11</code> 이 기존 최단 거리인 무한대 보다 작기 때문에 새로운 최단거리는 11 로 업데이트 된다.</li>\n</ol>\n<p>이번 회차에 업데이트된 자리들은 모두 이전 정점이 2로 갱신된다. 왜냐면 2를 거쳐왔으니까..!</p>\n<h3 id=\"phase-4-k--3\" style=\"position:relative;\"><a href=\"#phase-4-k--3\" aria-label=\"phase 4 k  3 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 4 (k = 3)</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1034px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 70.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAABf0lEQVQ4y6WU246DMAxE+f9f7BtUW8ql5R4g0GyOg1N2tS/VIlmxY2c89VhNtm1z+747/V6v1w//k5gvMcY4aze3LEsEpsmyrrFo9f56iqmlBiwA9S1+gjPPxj2fDzdNk/dnNwyDxPjLMru2bcXwQ9xIDXljJl/7lNNa6xI60V0BuIR13/fib5t1Xdd668TnjhzN8WHXNI3HCKwFEKDHo5YiGAAII5jzADCMHA9pDigxNWVZ+rfjG5AiWAAMW04Aubd29T+vF8OHFblxHCUGFDKcAqhqweosCqCq4FkU7gBVEbAgUPATCv+zNr8/AWRORVHEzjpsfEwZKqsw65CXFTvVytowj8vl4s9BZoFq12sW1+R2+/KDLw4RZlmTvu/ERwxEimsDIB2yLIuDZZ6AKuP7/e6qqjoYWdlDWCo7NoBfcKhsRfq6roQpoKwEsTICANNFT9NUYsDeDE1gqKrleS6nzghWOvS6rmVVghB7XC/ynHl+i0onZ+U+/TP4K/cNk/VH0RrJOikAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"6\"\n        title=\"6\"\n        src=\"/static/88321f706b0cdbc3f06dcd6e35004e42/709cb/6.png\"\n        srcset=\"/static/88321f706b0cdbc3f06dcd6e35004e42/5a46d/6.png 300w,\n/static/88321f706b0cdbc3f06dcd6e35004e42/0a47e/6.png 600w,\n/static/88321f706b0cdbc3f06dcd6e35004e42/709cb/6.png 1034w\"\n        sizes=\"(max-width: 1034px) 100vw, 1034px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>3번 정점에 대해 최단거리를 계산해보자.</p>\n<ol>\n<li>d[4][2] 는 <code class=\"language-text\">d[4][3] + d[3][2] = -5 + 4 = -1</code> 이 기존 최단 거리인 5 보다 작기 때문에 새로운 최단거리는 -1로 갱신된다.</li>\n</ol>\n<h3 id=\"phase-5-k--4\" style=\"position:relative;\"><a href=\"#phase-5-k--4\" aria-label=\"phase 5 k  4 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 5 (k = 4)</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1034px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 70.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAABfElEQVQ4y6WU626DMAyFef/H7CpVoxQIt4Qk1ONzatpN/VMNKcInto8Pttsq5yzbtok99/v9l/0J5qm895JSlnVdD2KKrDEeSWCOJRMLNr/lYlfbliWEIE3TyDzPuzPINE3Sda3eg4fBiXNObY5zvcbgD8HvsZ0sy7wXSVJRKaUofd9rQEpJUD2Oo9oEDcOgB5s7fMuyqI26UqyoVsJS1WkQpBCiguoEopBDXIyrqocUHzHXa625ByFBt1sjpZ9RnXxG3PsI5vM4BSctTnvwUaRtb/pWwneNzXnTZJsi9+bjQPqKbWA6FBL/szZ/HyVEXV3XR2VrtinDfsW0xDDq6Lv5qnLhd8LvvS+T9oKJn89fauPr++4YEsn0dxwHxawLA/O+TP2xNmUVCAYzHEhNMerbthV2ltWBvEw16UALWSxDIclUUM0WG1wWN6gaVNiin04nJeWzbSPKhiR+Kc++cEGj6SvYfIXouQVg2wLel8vlmHT1OrlP/wze+X4A8FdJJPGqCWUAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"7\"\n        title=\"7\"\n        src=\"/static/0fbbb2960c56e907e077bcecce73968b/709cb/7.png\"\n        srcset=\"/static/0fbbb2960c56e907e077bcecce73968b/5a46d/7.png 300w,\n/static/0fbbb2960c56e907e077bcecce73968b/0a47e/7.png 600w,\n/static/0fbbb2960c56e907e077bcecce73968b/709cb/7.png 1034w\"\n        sizes=\"(max-width: 1034px) 100vw, 1034px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>4번 정점을 거쳐가는 최단거리를 계산해보자</p>\n<ol>\n<li>d[1][3] 는 <code class=\"language-text\">d[1][4] + d[4][3] = 4 + -5 = -1</code> 이 기존 최단 거리인 8보다 짧기 때문에 최단거리는 -1로 갱신된다.</li>\n<li>d[2][1] 은 <code class=\"language-text\">d[2][4] + d[4][1] = 1 + 2 = 3</code> 이 기존 최단 거리인 무한대 보다 작기 때문에 최단거리는 3이 된다.</li>\n<li>d[2][3] 은 <code class=\"language-text\">d[2][4] + d[4][3] = 1 + -5 = -4</code> 가 기존 최단거리인 무한대 보다 작기 때문에 최단거리는 -4로 갱신된다.</li>\n<li>d[2][5] 은 <code class=\"language-text\">d[2][4] + d[4][5] = 1 + -2 = -1</code> 가 기존 최단 거리인 7보다 작기 때문에 최단거리는 -1로 갱신된다.</li>\n<li>d[3][1] 은 <code class=\"language-text\">d[3][4] + d[4][1] = 5 + 2 = 7</code> 이 기존 최단 거리인 무한대 모다 작기 때문에 최단거리는 7로 갱신된다.</li>\n<li>d[3][5] 는 <code class=\"language-text\">d[3][4] + d[4][5] = 5 + -2 = 3</code> 이 기존 최단거리인 11보다 작기 때문에 최단거리는 3으로 갱신된다.</li>\n<li>d[5][1] 은 <code class=\"language-text\">d[5][4] + d[4][1] = 6 + 2 = 8</code> 이 기존 최단 거리인 무한대 보다 작기 때문에 최단거리는 8로 갱신된다.</li>\n<li>d[5][2] 는 <code class=\"language-text\">d[5][4] + d[4][2] = 6 + -1 = 5</code> 이 기존 최단거리인 무한대 보다 작기 때문에 최단거리는 5로 갱신된다.</li>\n<li>d[5][3] 은 <code class=\"language-text\">d[5][4] + d[4][3] = 6 + -5 = 1</code> 이 기존 최단거리인 무한대보다 작기 때문에 최단거리는 1이 된다.</li>\n</ol>\n<p>이번 반복에서 갱신된 모든 정점들은 이전 경로가 4로 갱신된다.</p>\n<h3 id=\"phase-6-k--5\" style=\"position:relative;\"><a href=\"#phase-6-k--5\" aria-label=\"phase 6 k  5 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 6 (k = 5)</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1034px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 70.66666666666667%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAABdUlEQVQ4y6WU246DMAxE8/+fyQtaSrlDIAl4OU5Nu1Vfqo1kEcfOeGJP61JKsu+72DqO48/+G5/lvPcSY5Jt2xSYOF8KWW4IQc3Wuq7nnXiBPu8e4vY9aUJd1zLPs+7neZK+73S/bat0XavGPvudTNOk8XX10ratLMt8kojiYBJj0CSr7P0i4zjqHhuGQc18YuSwh13f9/oFSwGpyuGyLApKGzJDr4nD0KuRF8J2MmoUlBg5t1uldy9Aku73WnI/gwZ5Bn3D53lY9qMWpz3EKNI0d/0q4KfGprTrZZsi5xbDAH318wDz3nHxP7J5XwoIu6qqrsqc8WxjRtxegBEzH3b03WIuH/gT8EflQiISKYpC+0IM34bEZfo7joP6yIWB2dQfsslSIBmf4SAjYwz7pmkEzaI1wPNUow40g4U8FC4ZC6rBiomakCkCG1iY0GEPKK8xRWSFRH4pz75wQKPfe5iBnirANxXwLcvymrR7ndy3fwafYr+eWEkGeELJygAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"8\"\n        title=\"8\"\n        src=\"/static/525c611e52da5f27d9c3737f9c434996/709cb/8.png\"\n        srcset=\"/static/525c611e52da5f27d9c3737f9c434996/5a46d/8.png 300w,\n/static/525c611e52da5f27d9c3737f9c434996/0a47e/8.png 600w,\n/static/525c611e52da5f27d9c3737f9c434996/709cb/8.png 1034w\"\n        sizes=\"(max-width: 1034px) 100vw, 1034px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>마지막으로 정점 5를 경유하는 최단거리를 계산해보자</p>\n<ol>\n<li>d[1][2] 는 <code class=\"language-text\">d[1][5] + d[5][2] = -4 + 5 = 1</code> 이 기존 최단경로인 3보다 작기 때문에 최단거리는 1이 된다.</li>\n<li>d[1][3] 은 <code class=\"language-text\">d[1][5] + d[5][3] = -4 + 1 = -3</code> 이 기존 최단경로인 -1보다 작기 때문에 최단거리는 -3이 된다.</li>\n<li>d[1][4] 는 <code class=\"language-text\">d[1][5] + d[5][4] = -4 + 6 = 2</code> 가 기존 최단경로인 4보다 작기 때문에 최단거리는 2가 된다.</li>\n</ol>","frontmatter":{"title":"[알고리즘 정리] 플로이드-워셜 알고리즘(Floyd-Warshall Algorithm)","date":"May 29, 2020"}}},"pageContext":{"slug":"/Algorithm-Analysis/2020-05-29-알고리즘-Floyd-Warshall/","previous":{"fields":{"slug":"/Operating-Systems/2020-05-28-운영체제-데드락해결안/"},"frontmatter":{"title":"[운영체제] 교착상태를 해결하는 방법들","category":"Operating-Systems","draft":false}},"next":{"fields":{"slug":"/Algorithm-Analysis/2020-05-30-알고리즘-Quick-Sort/"},"frontmatter":{"title":"[알고리즘 정리] 퀵정렬(Quick Sort)","category":"Algorithm-Analysis","draft":false}}}},"staticQueryHashes":["2486386679","3128451518"]}