﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-雪黛依梦-随笔分类-求最短路径</title><link>http://www.cppblog.com/wing/category/14747.html</link><description>幸福的飞翔——简单世界</description><language>zh-cn</language><lastBuildDate>Thu, 10 Mar 2011 17:16:17 GMT</lastBuildDate><pubDate>Thu, 10 Mar 2011 17:16:17 GMT</pubDate><ttl>60</ttl><item><title>Floyd算法详解：求解任意两点间的最短距离</title><link>http://www.cppblog.com/wing/archive/2011/03/10/141511.html</link><dc:creator>雪黛依梦</dc:creator><author>雪黛依梦</author><pubDate>Thu, 10 Mar 2011 08:37:00 GMT</pubDate><guid>http://www.cppblog.com/wing/archive/2011/03/10/141511.html</guid><wfw:comment>http://www.cppblog.com/wing/comments/141511.html</wfw:comment><comments>http://www.cppblog.com/wing/archive/2011/03/10/141511.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/wing/comments/commentRss/141511.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/wing/services/trackbacks/141511.html</trackback:ping><description><![CDATA[<div class=postbody><span style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px">Floyd-Warshall算法，简称Floyd算法，用于求解任意两点间的最短距离，时间复杂度为O(n^3)。我们平时所见的Floyd算法的一般形式如下：</span>
<div style="PADDING-BOTTOM: 4px; LINE-HEIGHT: 20px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 4px; WIDTH: 1109px; PADDING-RIGHT: 5px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px; BORDER-LEFT-COLOR: rgb(204,204,204); WORD-BREAK: break-all; PADDING-TOP: 4px"><span style="COLOR: rgb(0,128,128)">1</span>&nbsp;<span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)">&nbsp;Floyd(){<br></span><span style="COLOR: rgb(0,128,128)">2</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;i,j,k;<br></span><span style="COLOR: rgb(0,128,128)">3</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(k</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;k</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;k</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">4</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(i</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;i</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">5</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(j</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;j</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;j</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">6</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">(dist[i][k]</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">dist[k][j]</span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">dist[i][j])<br></span><span style="COLOR: rgb(0,128,128)">7</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[i][j]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">dist[i][k]</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">dist[k][j];<br></span><span style="COLOR: rgb(0,128,128)">8</span>&nbsp;<span style="COLOR: rgb(0,0,0)">}</span></div>
<p style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px">&nbsp; 注意下第6行这个地方，如果dist[i][k]或者dist[k][j]不存在，程序中用一个很大的数代替。最好写成if(dist[i][k]!=INF &amp;&amp; dist[k][j]!=INF &amp;&amp; dist[i][k]+dist[k][j]&lt;dist[i][j])，从而防止溢出所造成的错误。<br>&nbsp; 上面这个形式的算法其实是Floyd算法的精简版，而真正的Floyd算法是一种基于DP(Dynamic Programming)的最短路径算法。<br>&nbsp; 设图G中n 个顶点的编号为1到n。令c [i, j, k]表示从i 到j 的最短路径的长度，其中k 表示该路径中的最大顶点，也就是说c[i,j,k]这条最短路径所通过的中间顶点最大不超过k。因此，如果G中包含边&lt;i, j&gt;，则c[i, j, 0] =边&lt;i, j&gt; 的长度；若i= j ，则c[i,j,0]=0；如果G中不包含边&lt;i, j&gt;，则c (i, j, 0)= +&#8734;。c[i, j, n] 则是从i 到j 的最短路径的长度。<br>&nbsp; 对于任意的k&gt;0，通过分析可以得到：中间顶点不超过k 的i 到j 的最短路径有两种可能：该路径含或不含中间顶点k。若不含，则该路径长度应为c[i, j, k-1]，否则长度为 c[i, k, k-1] +c [k, j, k-1]。c[i, j, k]可取两者中的最小值。<br>&nbsp; 状态转移方程：c[i, j, k]=min{c[i, j, k-1], c [i, k, k-1]+c [k, j, k-1]}，k＞0。<br>&nbsp; 这样，问题便具有了最优子结构性质，可以用动态规划方法来求解。</p>
<p style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px"></p>
<div style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px" align=center src_cetemp="/images/cppblog_com/mythit/dist.jpg"><img border=0 alt="" src="http://www.cppblog.com/images/cppblog_com/mythit/dist.jpg" width=510 height=225></div>
<span style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px">&nbsp; 为了进一步理解，观察上面这个有向图：若k=0, 1, 2, 3，则c[1,3,k]= +&#8734;；c[1,3,4]= 28；若k = 5, 6, 7，则c [1,3,k] = 10；若k=8, 9, 10，则c[1,3,k] = 9。因此1到3的最短路径长度为9。</span><span style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px"><br></span><span style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px">&nbsp; 下面通过程序来分析这一DP过程，对应上面给出的有向图：</span><span style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px"><br></span>
<p style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px">&nbsp;</p>
<div style="PADDING-BOTTOM: 4px; LINE-HEIGHT: 20px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 4px; WIDTH: 1109px; PADDING-RIGHT: 5px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px; BORDER-LEFT-COLOR: rgb(204,204,204); WORD-BREAK: break-all; PADDING-TOP: 4px"><span style="COLOR: rgb(0,128,128)">&nbsp;1</span>&nbsp;<span style="COLOR: rgb(0,0,0)">#include&nbsp;</span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">iostream</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">&nbsp;2</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">using</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">namespace</span><span style="COLOR: rgb(0,0,0)">&nbsp;std;<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;3</span>&nbsp;<span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">&nbsp;4</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">const</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;INF&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">100000</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;5</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;n</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">10</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">11</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">11</span><span style="COLOR: rgb(0,0,0)">],dist[</span><span style="COLOR: rgb(0,0,0)">11</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">11</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">11</span><span style="COLOR: rgb(0,0,0)">];<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;6</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)">&nbsp;init(){<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;7</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;i,j;<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;8</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(i</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;i</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;9</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(j</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;j</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;j</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">10</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[i][j]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">(i</span><span style="COLOR: rgb(0,0,0)">==</span><span style="COLOR: rgb(0,0,0)">j)</span><span style="COLOR: rgb(0,0,0)">?</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">:INF;<br></span><span style="COLOR: rgb(0,128,128)">11</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;map[</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">20</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">5</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">12</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;map[</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">6</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">6</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">13</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;map[</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">7</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">5</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">7</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">5</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">14</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;map[</span><span style="COLOR: rgb(0,0,0)">6</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">7</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">6</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">15</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;map[</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">10</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">9</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">7</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">10</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">9</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">16</span>&nbsp;<span style="COLOR: rgb(0,0,0)">}<br></span><span style="COLOR: rgb(0,128,128)">17</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)">&nbsp;floyd_dp(){<br></span><span style="COLOR: rgb(0,128,128)">18</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;i,j,k;<br></span><span style="COLOR: rgb(0,128,128)">19</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(i</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;i</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">20</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(j</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;j</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;j</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">21</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[i][j][</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">map[i][j];<br></span><span style="COLOR: rgb(0,128,128)">22</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(k</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;k</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;k</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">23</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(i</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;i</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">24</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(j</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;j</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;j</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">){<br></span><span style="COLOR: rgb(0,128,128)">25</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[i][j][k]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">dist[i][j][k</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">];<br></span><span style="COLOR: rgb(0,128,128)">26</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">(dist[i][k][k</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">dist[k][j][k</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">dist[i][j][k])<br></span><span style="COLOR: rgb(0,128,128)">27</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[i][j][k]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">dist[i][k][k</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">dist[k][j][k</span><span style="COLOR: rgb(0,0,0)">-</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">];<br></span><span style="COLOR: rgb(0,128,128)">28</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: rgb(0,128,128)">29</span>&nbsp;<span style="COLOR: rgb(0,0,0)">}<br></span><span style="COLOR: rgb(0,128,128)">30</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;main(){<br></span><span style="COLOR: rgb(0,128,128)">31</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;k,u,v;<br></span><span style="COLOR: rgb(0,128,128)">32</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;init();<br></span><span style="COLOR: rgb(0,128,128)">33</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;floyd_dp();<br></span><span style="COLOR: rgb(0,128,128)">34</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">while</span><span style="COLOR: rgb(0,0,0)">(cin</span><span style="COLOR: rgb(0,0,0)">&gt;&gt;</span><span style="COLOR: rgb(0,0,0)">u</span><span style="COLOR: rgb(0,0,0)">&gt;&gt;</span><span style="COLOR: rgb(0,0,0)">v,u</span><span style="COLOR: rgb(0,0,0)">||</span><span style="COLOR: rgb(0,0,0)">v){<br></span><span style="COLOR: rgb(0,128,128)">35</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(k</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">;k</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;k</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">){<br></span><span style="COLOR: rgb(0,128,128)">36</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">(dist[u][v][k]</span><span style="COLOR: rgb(0,0,0)">==</span><span style="COLOR: rgb(0,0,0)">INF)&nbsp;cout</span><span style="COLOR: rgb(0,0,0)">&lt;&lt;</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">+&#8734;</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&lt;&lt;</span><span style="COLOR: rgb(0,0,0)">endl;<br></span><span style="COLOR: rgb(0,128,128)">37</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">else</span><span style="COLOR: rgb(0,0,0)">&nbsp;cout</span><span style="COLOR: rgb(0,0,0)">&lt;&lt;</span><span style="COLOR: rgb(0,0,0)">dist[u][v][k]</span><span style="COLOR: rgb(0,0,0)">&lt;&lt;</span><span style="COLOR: rgb(0,0,0)">endl;<br></span><span style="COLOR: rgb(0,128,128)">38</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: rgb(0,128,128)">39</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: rgb(0,128,128)">40</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">41</span>&nbsp;<span style="COLOR: rgb(0,0,0)">}</span></div>
<p style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px">&nbsp; 输入 1 3<br>&nbsp; 输出 +&#8734;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +&#8734;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +&#8734;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; +&#8734;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 28<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 9</p>
<p style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px">&nbsp; Floyd-Warshall算法不仅能求出任意2点间的最短路径，还可以保存最短路径上经过的节点。下面用精简版的Floyd算法实现这一过程，程序中的图依然对应上面的有向图。<br></p>
<div style="PADDING-BOTTOM: 4px; LINE-HEIGHT: 20px; BACKGROUND-COLOR: rgb(238,238,238); PADDING-LEFT: 4px; WIDTH: 1109px; PADDING-RIGHT: 5px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px; BORDER-LEFT-COLOR: rgb(204,204,204); WORD-BREAK: break-all; PADDING-TOP: 4px"><span style="COLOR: rgb(0,128,128)">&nbsp;1</span>&nbsp;<span style="COLOR: rgb(0,0,0)">#include&nbsp;</span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">iostream</span><span style="COLOR: rgb(0,0,0)">&gt;</span><span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">&nbsp;2</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">using</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">namespace</span><span style="COLOR: rgb(0,0,0)">&nbsp;std;<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;3</span>&nbsp;<span style="COLOR: rgb(0,0,0)"><br></span><span style="COLOR: rgb(0,128,128)">&nbsp;4</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">const</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;INF&nbsp;</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">100000</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;5</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;n</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">10</span><span style="COLOR: rgb(0,0,0)">,path[</span><span style="COLOR: rgb(0,0,0)">11</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">11</span><span style="COLOR: rgb(0,0,0)">],dist[</span><span style="COLOR: rgb(0,0,0)">11</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">11</span><span style="COLOR: rgb(0,0,0)">],map[</span><span style="COLOR: rgb(0,0,0)">11</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">11</span><span style="COLOR: rgb(0,0,0)">];<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;6</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)">&nbsp;init(){<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;7</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;i,j;<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;8</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(i</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;i</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">&nbsp;9</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(j</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;j</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;j</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">10</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;map[i][j]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">(i</span><span style="COLOR: rgb(0,0,0)">==</span><span style="COLOR: rgb(0,0,0)">j)</span><span style="COLOR: rgb(0,0,0)">?</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">:INF;<br></span><span style="COLOR: rgb(0,128,128)">11</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;map[</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">20</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">5</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">12</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;map[</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">6</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">6</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">13</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;map[</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">7</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">4</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">5</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">7</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">5</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">14</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;map[</span><span style="COLOR: rgb(0,0,0)">6</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">3</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">7</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">6</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">15</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;map[</span><span style="COLOR: rgb(0,0,0)">8</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">10</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">9</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">7</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">2</span><span style="COLOR: rgb(0,0,0)">,map[</span><span style="COLOR: rgb(0,0,0)">10</span><span style="COLOR: rgb(0,0,0)">][</span><span style="COLOR: rgb(0,0,0)">9</span><span style="COLOR: rgb(0,0,0)">]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">16</span>&nbsp;<span style="COLOR: rgb(0,0,0)">}<br></span><span style="COLOR: rgb(0,128,128)">17</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)">&nbsp;floyd(){<br></span><span style="COLOR: rgb(0,128,128)">18</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;i,j,k;<br></span><span style="COLOR: rgb(0,128,128)">19</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(i</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;i</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">20</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(j</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;j</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;j</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">21</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[i][j]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">map[i][j],path[i][j]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">22</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(k</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;k</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;k</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">23</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(i</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;i</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;i</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">24</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">for</span><span style="COLOR: rgb(0,0,0)">(j</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">1</span><span style="COLOR: rgb(0,0,0)">;j</span><span style="COLOR: rgb(0,0,0)">&lt;=</span><span style="COLOR: rgb(0,0,0)">n;j</span><span style="COLOR: rgb(0,0,0)">++</span><span style="COLOR: rgb(0,0,0)">)<br></span><span style="COLOR: rgb(0,128,128)">25</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">(dist[i][k]</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">dist[k][j]</span><span style="COLOR: rgb(0,0,0)">&lt;</span><span style="COLOR: rgb(0,0,0)">dist[i][j])<br></span><span style="COLOR: rgb(0,128,128)">26</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dist[i][j]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">dist[i][k]</span><span style="COLOR: rgb(0,0,0)">+</span><span style="COLOR: rgb(0,0,0)">dist[k][j],path[i][j]</span><span style="COLOR: rgb(0,0,0)">=</span><span style="COLOR: rgb(0,0,0)">k;<br></span><span style="COLOR: rgb(0,128,128)">27</span>&nbsp;<span style="COLOR: rgb(0,0,0)">}<br></span><span style="COLOR: rgb(0,128,128)">28</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">void</span><span style="COLOR: rgb(0,0,0)">&nbsp;output(</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;i,</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;j){<br></span><span style="COLOR: rgb(0,128,128)">29</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">(i</span><span style="COLOR: rgb(0,0,0)">==</span><span style="COLOR: rgb(0,0,0)">j)&nbsp;</span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">30</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">(path[i][j]</span><span style="COLOR: rgb(0,0,0)">==</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">)&nbsp;cout</span><span style="COLOR: rgb(0,0,0)">&lt;&lt;</span><span style="COLOR: rgb(0,0,0)">j</span><span style="COLOR: rgb(0,0,0)">&lt;&lt;</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">31</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">else</span><span style="COLOR: rgb(0,0,0)">{<br></span><span style="COLOR: rgb(0,128,128)">32</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output(i,path[i][j]);<br></span><span style="COLOR: rgb(0,128,128)">33</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output(path[i][j],j);<br></span><span style="COLOR: rgb(0,128,128)">34</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: rgb(0,128,128)">35</span>&nbsp;<span style="COLOR: rgb(0,0,0)">}<br></span><span style="COLOR: rgb(0,128,128)">36</span>&nbsp;<span style="COLOR: rgb(0,0,0)"></span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;main(){<br></span><span style="COLOR: rgb(0,128,128)">37</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">int</span><span style="COLOR: rgb(0,0,0)">&nbsp;u,v;<br></span><span style="COLOR: rgb(0,128,128)">38</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;init();<br></span><span style="COLOR: rgb(0,128,128)">39</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;floyd();<br></span><span style="COLOR: rgb(0,128,128)">40</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">while</span><span style="COLOR: rgb(0,0,0)">(cin</span><span style="COLOR: rgb(0,0,0)">&gt;&gt;</span><span style="COLOR: rgb(0,0,0)">u</span><span style="COLOR: rgb(0,0,0)">&gt;&gt;</span><span style="COLOR: rgb(0,0,0)">v,u</span><span style="COLOR: rgb(0,0,0)">||</span><span style="COLOR: rgb(0,0,0)">v){<br></span><span style="COLOR: rgb(0,128,128)">41</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">if</span><span style="COLOR: rgb(0,0,0)">(dist[u][v]</span><span style="COLOR: rgb(0,0,0)">==</span><span style="COLOR: rgb(0,0,0)">INF)&nbsp;cout</span><span style="COLOR: rgb(0,0,0)">&lt;&lt;</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">No&nbsp;path</span><span style="COLOR: rgb(0,0,0)">"</span><span style="COLOR: rgb(0,0,0)">&lt;&lt;</span><span style="COLOR: rgb(0,0,0)">endl;<br></span><span style="COLOR: rgb(0,128,128)">42</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">else</span><span style="COLOR: rgb(0,0,0)">{<br></span><span style="COLOR: rgb(0,128,128)">43</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: rgb(0,0,0)">&lt;&lt;</span><span style="COLOR: rgb(0,0,0)">u</span><span style="COLOR: rgb(0,0,0)">&lt;&lt;</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">'</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">44</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output(u,v);<br></span><span style="COLOR: rgb(0,128,128)">45</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="COLOR: rgb(0,0,0)">&lt;&lt;</span><span style="COLOR: rgb(0,0,0)">endl;<br></span><span style="COLOR: rgb(0,128,128)">46</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: rgb(0,128,128)">47</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;}<br></span><span style="COLOR: rgb(0,128,128)">48</span>&nbsp;<span style="COLOR: rgb(0,0,0)">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: rgb(0,0,255)">return</span><span style="COLOR: rgb(0,0,0)">&nbsp;</span><span style="COLOR: rgb(0,0,0)">0</span><span style="COLOR: rgb(0,0,0)">;<br></span><span style="COLOR: rgb(0,128,128)">49</span>&nbsp;<span style="COLOR: rgb(0,0,0)">}</span></div>
<p style="LINE-HEIGHT: 20px; FONT-FAMILY: georgia, verdana, Arial, helvetica, sans-seriff; COLOR: rgb(75,75,75); FONT-SIZE: 13px">&nbsp; 输入 1 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp; 输出 1 2 5 8 6 3</p>
</div>
<img src ="http://www.cppblog.com/wing/aggbug/141511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/wing/" target="_blank">雪黛依梦</a> 2011-03-10 16:37 <a href="http://www.cppblog.com/wing/archive/2011/03/10/141511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>