﻿<?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++博客-&lt;p style="align:center; color:Green"&gt;Flying in the sky.&lt;/p&gt;-文章分类-最短路</title><link>http://www.cppblog.com/imky/category/14581.html</link><description>&lt;p style="color:Blue"&gt;&lt;b&gt;&lt;big&gt;----imky&lt;/b&gt;&lt;/p&gt;                </description><language>zh-cn</language><lastBuildDate>Sat, 14 Aug 2010 10:58:23 GMT</lastBuildDate><pubDate>Sat, 14 Aug 2010 10:58:23 GMT</pubDate><ttl>60</ttl><item><title>采用Floyd+倍增法求解“经过N条边的最短路” POJ 3613</title><link>http://www.cppblog.com/imky/articles/123433.html</link><dc:creator>imky</dc:creator><author>imky</author><pubDate>Sat, 14 Aug 2010 07:05:00 GMT</pubDate><guid>http://www.cppblog.com/imky/articles/123433.html</guid><wfw:comment>http://www.cppblog.com/imky/comments/123433.html</wfw:comment><comments>http://www.cppblog.com/imky/articles/123433.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/imky/comments/commentRss/123433.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/imky/services/trackbacks/123433.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: CodeCode highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->&nbsp;&nbsp;1//f[i][j][k]如果表示从节点i到j经过k条边的最短路则：&nbsp;&nbsp;2//f[i][j][k]=max{f[i][j][k],f[i][t][k/2...&nbsp;&nbsp;<a href='http://www.cppblog.com/imky/articles/123433.html'>阅读全文</a><img src ="http://www.cppblog.com/imky/aggbug/123433.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/imky/" target="_blank">imky</a> 2010-08-14 15:05 <a href="http://www.cppblog.com/imky/articles/123433.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Floyd 求最小圈法</title><link>http://www.cppblog.com/imky/articles/123428.html</link><dc:creator>imky</dc:creator><author>imky</author><pubDate>Sat, 14 Aug 2010 06:49:00 GMT</pubDate><guid>http://www.cppblog.com/imky/articles/123428.html</guid><wfw:comment>http://www.cppblog.com/imky/comments/123428.html</wfw:comment><comments>http://www.cppblog.com/imky/articles/123428.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/imky/comments/commentRss/123428.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/imky/services/trackbacks/123428.html</trackback:ping><description><![CDATA[<p dir=ltr style="MARGIN-RIGHT: 0px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong style="COLOR: red"> 对于一个最小圈，它必然存在一个编号最大的顶点，比如为 k，那么在执行 Floyd-Warshall 算法的第 k 次外层迭代前，d[i][j] 存放的是中间顶点在集合 {1,2,...,k-1} 中，i 到 j 的最短路径。容易知道此时 d[i][k]+dist[k][j]+A[j][i] 就是最大编号为 k、包含 i、j、k（绕向为 j-&gt;i-&gt;k）的最小圈。做完 n 次迭代后，我们就可以知道最大编号为任意值的最小圈：最大编号为1的最小圈、最大编号为2的最小圈、&#8230;&#8230;、最大编号为n的最小圈，这些值中取最小值即可。</strong><br><br></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img id=Code_Closed_Image_144901 onclick="this.style.display='none'; Code_Closed_Text_144901.style.display='none'; Code_Open_Image_144901.style.display='inline'; Code_Open_Text_144901.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" width=11 align=top><img id=Code_Open_Image_144901 style="DISPLAY: none" onclick="this.style.display='none'; Code_Open_Text_144901.style.display='none'; Code_Closed_Image_144901.style.display='inline'; Code_Closed_Text_144901.style.display='inline';" height=16 src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" width=11 align=top><span id=Code_Closed_Text_144901 style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">Code</span><span id=Code_Open_Text_144901 style="DISPLAY: none"><br><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="COLOR: #008080">&nbsp;1</span><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;best&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br></span><span style="COLOR: #008080">&nbsp;2</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align=top></span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;k&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;k&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">k)<br></span><span style="COLOR: #008080">&nbsp;3</span><span style="COLOR: #000000"><img id=Codehighlighter1_43_367_Open_Image onclick="this.style.display='none'; Codehighlighter1_43_367_Open_Text.style.display='none'; Codehighlighter1_43_367_Closed_Image.style.display='inline'; Codehighlighter1_43_367_Closed_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align=top><img id=Codehighlighter1_43_367_Closed_Image style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_43_367_Closed_Text.style.display='none'; Codehighlighter1_43_367_Open_Image.style.display='inline'; Codehighlighter1_43_367_Open_Text.style.display='inline';" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align=top></span><span id=Codehighlighter1_43_367_Closed_Text style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id=Codehighlighter1_43_367_Open_Text><span style="COLOR: #000000">{<br></span><span style="COLOR: #008080">&nbsp;4</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;k;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br></span><span style="COLOR: #008080">&nbsp;5</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;k;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br></span><span style="COLOR: #008080">&nbsp;6</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(d[i][k]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d[k][j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">A[j][i]&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;best)<br></span><span style="COLOR: #008080">&nbsp;7</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;best&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;d[i][k]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d[k][j]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">A[j][i];<br></span><span style="COLOR: #008080">&nbsp;8</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;i&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;i&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">i)<br></span><span style="COLOR: #008080">&nbsp;9</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">for</span><span style="COLOR: #000000">&nbsp;(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;j&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">;&nbsp;j&nbsp;</span><span style="COLOR: #000000">&lt;=</span><span style="COLOR: #000000">&nbsp;n;&nbsp;</span><span style="COLOR: #000000">++</span><span style="COLOR: #000000">j)<br></span><span style="COLOR: #008080">10</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">&nbsp;(d[i][k]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d[k][j]&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">&nbsp;d[i][j])<br></span><span style="COLOR: #008080">11</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align=top>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d[i][j]&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;d[i][k]</span><span style="COLOR: #000000">+</span><span style="COLOR: #000000">d[k][j];<br></span><span style="COLOR: #008080">12</span><span style="COLOR: #000000"><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align=top>}</span></span></span></div>
<br><br>
<img src ="http://www.cppblog.com/imky/aggbug/123428.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/imky/" target="_blank">imky</a> 2010-08-14 14:49 <a href="http://www.cppblog.com/imky/articles/123428.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>