﻿<?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++博客-单链DNA-随笔分类-算法学习</title><link>http://www.cppblog.com/Geek/category/12670.html</link><description> /*c/c++ 算法 网络 游戏编程*/ 
</description><language>zh-cn</language><lastBuildDate>Tue, 26 Oct 2010 22:42:54 GMT</lastBuildDate><pubDate>Tue, 26 Oct 2010 22:42:54 GMT</pubDate><ttl>60</ttl><item><title>【数据结构】字典树</title><link>http://www.cppblog.com/Geek/archive/2010/10/24/128565.html</link><dc:creator>Geek.tan</dc:creator><author>Geek.tan</author><pubDate>Sun, 24 Oct 2010 10:13:00 GMT</pubDate><guid>http://www.cppblog.com/Geek/archive/2010/10/24/128565.html</guid><wfw:comment>http://www.cppblog.com/Geek/comments/128565.html</wfw:comment><comments>http://www.cppblog.com/Geek/archive/2010/10/24/128565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Geek/comments/commentRss/128565.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Geek/services/trackbacks/128565.html</trackback:ping><description><![CDATA[&nbsp; <fieldset><legend style="font-family: 隶书;">字典树概念</legend>&nbsp;&nbsp; Trie，又称单词查找树，是一种树形结构，是哈希树的变种。<br>&nbsp;&nbsp; 典型应用：于统计和排序大量的字符串（但不仅限于字符串），所以经常用于搜索引擎系统用于文本词频的统计。<br>&nbsp;&nbsp; 优点：最大限度地减少无谓的字符串比较，查询效率比哈希表高。<br></fieldset><br><fieldset><legend>字典树性质</legend>1.根节点不包含字符，除根节点外每一个节点都只包含一个字符。<br>2.从根节点到某一节点，路径上经过的字符连接起来，为该节点对应的字符串。<br>3.每一个节点所包含的字符都不相同。<br></fieldset><br><fieldset><legend>图片示例</legend><img alt="" src="http://www.cppblog.com/images/cppblog_com/geek/trie.jpg" height="325" width="388"> <br>单词：abcd，bcd，efg，hii构建的字典树示例<br></fieldset><br><fieldset><legend>结构体定义</legend>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;KIND</span><span style="color: #000000;">=</span><span style="color: #000000;">26</span><span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;">26个小写字母</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">struct</span><span style="color: #000000;">&nbsp;Trie<br>&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;count;</span><span style="color: #008000;">//</span><span style="color: #008000;">统计该字母出现次数</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trie&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">next[KIND];</span><span style="color: #008000;">//</span><span style="color: #008000;">子节点</span><span style="color: #008000;"><br>&nbsp;&nbsp;&nbsp;&nbsp; Trie()<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count=0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for(int i=0;i&lt;KIND;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; next[i]=NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br></span><span style="color: #000000;">&nbsp;}</span></div>
</fieldset><br><fieldset><legend>操作函数</legend>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;InsertNode(TreeNode&nbsp;</span><span style="color: #000000;">*&amp;</span><span style="color: #000000;">root,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">word)</span><span style="color: #008000;">//</span><span style="color: #008000;">向root根节点插入字符串word</span><span style="color: #008000;"><br></span><span style="color: #000000;">{<br>&nbsp;&nbsp;&nbsp;&nbsp;TreeNode&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">location</span><span style="color: #000000;">=</span><span style="color: #000000;">root;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">,branch</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(location</span><span style="color: #000000;">==</span><span style="color: #000000;">NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;TreeNode();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root</span><span style="color: #000000;">=</span><span style="color: #000000;">location;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(word[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;branch</span><span style="color: #000000;">=</span><span style="color: #000000;">word[i]</span><span style="color: #000000;">-</span><span style="color: #000000;">'</span><span style="color: #000000;">a</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(location</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next[branch])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next[branch]</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">count</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">如果该字符存在，串数量加1</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">不存在&nbsp;则建立新节点</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next[branch]</span><span style="color: #000000;">=</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;TreeNode();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location</span><span style="color: #000000;">=</span><span style="color: #000000;">location</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next[branch];<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>}<br><br><br></span><span style="color: #008000;">//</span><span style="color: #008000;">查找&nbsp;&nbsp;与插入类似</span><span style="color: #008000;"><br></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;SeacrhWord(TreeNode&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">root,</span><span style="color: #0000ff;">char</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">word)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;TreeNode&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">location</span><span style="color: #000000;">=</span><span style="color: #000000;">root;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">,branch</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;ans;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(location</span><span style="color: #000000;">==</span><span style="color: #000000;">NULL)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(word[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;branch</span><span style="color: #000000;">=</span><span style="color: #000000;">word[i]</span><span style="color: #000000;">-</span><span style="color: #000000;">'</span><span style="color: #000000;">a</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">location</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next[branch])&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location</span><span style="color: #000000;">=</span><span style="color: #000000;">location</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">next[branch];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ans</span><span style="color: #000000;">=</span><span style="color: #000000;">location</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">count;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;ans;<br>}<br></span></div>
<br></fieldset><br> <img src ="http://www.cppblog.com/Geek/aggbug/128565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Geek/" target="_blank">Geek.tan</a> 2010-10-24 18:13 <a href="http://www.cppblog.com/Geek/archive/2010/10/24/128565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载]树状数组</title><link>http://www.cppblog.com/Geek/archive/2010/09/10/126314.html</link><dc:creator>Geek.tan</dc:creator><author>Geek.tan</author><pubDate>Fri, 10 Sep 2010 06:15:00 GMT</pubDate><guid>http://www.cppblog.com/Geek/archive/2010/09/10/126314.html</guid><wfw:comment>http://www.cppblog.com/Geek/comments/126314.html</wfw:comment><comments>http://www.cppblog.com/Geek/archive/2010/09/10/126314.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Geek/comments/commentRss/126314.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Geek/services/trackbacks/126314.html</trackback:ping><description><![CDATA[<p><strong>树状数组</strong> <p><strong>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 武钢三中&nbsp;&nbsp; 吴豪</strong> <p>【引言】 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在解题过程中，我们有时需要维护一个数组的前缀和S[i]=A[1]+A[2]+...+A[i]。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 但是不难发现，如果我们修改了任意一个A[i],S[i]、S[i+1]...S[n]都会发生变化。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以说，每次修改A[i]后，调整前缀和S[]在最坏情况下会需要O(n)的时间。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当n非常大时，程序会运行得非常缓慢。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因此，这里我们引入“树状数组”，它的修改与求和都是O(logn)的，效率非常高。 <p>【理论】 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了对树状数组有个形 象的认识，我们先看下面这张图。 <p><a href="http://fqq11679.photo.hexun.com/46304845_d.html"><img border="0" alt="查看更多精彩图片" src="http://photo14.hexun.com/p/2008/0805/231524/b_25F1665EFE7011E2D2EF878AB4C18939.jpg"></a> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如图所示，红色矩形表示的数组C[]就是树状数组。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里，C[i]表示A[i-2^k+1]到A[i]的和，而k则是i在二进制时末尾0的个数， <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 或者说是i用2的幂方和表示时的最小指数。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; （ 当然，利用位运算，我们可以直接计算出2^k=i&amp;(i^(i-1)) ） <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时，我们也不难发现，这个k就是该节点在树中的高度，因而这个树的高度不会超过logn。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以,当我们修改A[i]的值时，可以从C[i]往根节点一路上溯，调整这条路上的所有C[]即可， <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个操作的复杂度在最坏情况下就是树的高度即O(logn)。&nbsp;&nbsp; <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外，对于求数列的前n项和，只需找到n以前的所有最大子树，把其根节点的C加起来即可。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不难发现，这些子树的数目是n在二进制时1的个数，或者说是把n展开成2的幂方和时的项数, <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因此，求和操作的复杂度也是O(logn)。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接着，我们考察这两种操作下标变化的规律： <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先看修改操作： <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 已知下标i，求其父节点的下标。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我们可以考虑对树从逻辑上转化： <p><a href="http://fqq11679.photo.hexun.com/46305127_d.html"><img border="0" alt="查看更多精彩图片" src="http://photo14.hexun.com/p/2008/0805/231525/b_D394E00A5DDCCB42C41D983528C5FA50.jpg"></a><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如图，我们将子树向右对称翻折，虚拟出一些空白结点（图中白色），将原树转化成完全二叉树。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 有图可知，对于节点i，其父节点的下标与翻折出的空白节点下标相同。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因而父节点下标 p=i+2^k (2^k是i用2的幂方和展开式中的最小幂，即i为根节点子树的规模) <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 即 p = i + i&amp;(i^(i-1)) 。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接着对于求和操作： <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为每棵子树覆盖的范围都是2的幂，所以我们要求子树i的前一棵树，只需让i减去2的最小幂即可。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 即 p = i - i&amp;(i^(i-1)) 。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 至此，我们已经比较详细的分析了树状数组的复杂度和原理。 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在最后，我们将给出一些树状数组的实现代码，希望读者能够仔细体会其中的细节。 <p>【代码】 <p>求最小幂2^k:  <p>int Lowbit(int t) <br>{ <br>&nbsp;&nbsp;&nbsp;&nbsp; return t &amp; ( t ^ ( t - 1 ) ); <br>}  <p>&nbsp;&nbsp; 求前n项和： <p>int Sum(int end) <br>{ <br>&nbsp;&nbsp;&nbsp;&nbsp; int sum = 0; <br>&nbsp;&nbsp;&nbsp;&nbsp; while(end &gt; 0) <br>&nbsp;&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum += in[end]; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end -= Lowbit(end); <br>&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp;&nbsp; return sum; <br>}  <p>对某个元素进行加法操作：  <p>void plus(int pos , int num) <br>{ <br>&nbsp;&nbsp;&nbsp;&nbsp; while(pos &lt;= n) <br>&nbsp;&nbsp;&nbsp;&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in[pos] += num; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pos += Lowbit(pos); <br>&nbsp;&nbsp;&nbsp;&nbsp; } <br>}  <img src ="http://www.cppblog.com/Geek/aggbug/126314.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Geek/" target="_blank">Geek.tan</a> 2010-09-10 14:15 <a href="http://www.cppblog.com/Geek/archive/2010/09/10/126314.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACM竞赛菜鸟入门指南（四）--贪心算法</title><link>http://www.cppblog.com/Geek/archive/2009/12/30/104469.html</link><dc:creator>Geek.tan</dc:creator><author>Geek.tan</author><pubDate>Wed, 30 Dec 2009 10:18:00 GMT</pubDate><guid>http://www.cppblog.com/Geek/archive/2009/12/30/104469.html</guid><wfw:comment>http://www.cppblog.com/Geek/comments/104469.html</wfw:comment><comments>http://www.cppblog.com/Geek/archive/2009/12/30/104469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Geek/comments/commentRss/104469.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Geek/services/trackbacks/104469.html</trackback:ping><description><![CDATA[<br>学习目的：掌握贪心算法<br><br>学习要求：熟练运用贪心算法解决以下问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.背包问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.活动会场安排问题<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.最小代价生成树<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.哈弗曼编码<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.单源最短路径<br><br>课件下载：<a href="http://www.cppblog.com/Files/Geek/Greedy.rar">http://www.cppblog.com/Files/Geek/Greedy.rar</a><br><br><br>
<br> <img src ="http://www.cppblog.com/Geek/aggbug/104469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Geek/" target="_blank">Geek.tan</a> 2009-12-30 18:18 <a href="http://www.cppblog.com/Geek/archive/2009/12/30/104469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACM菜鸟入门学习指南（三）--分治算法</title><link>http://www.cppblog.com/Geek/archive/2009/12/04/102573.html</link><dc:creator>Geek.tan</dc:creator><author>Geek.tan</author><pubDate>Fri, 04 Dec 2009 13:08:00 GMT</pubDate><guid>http://www.cppblog.com/Geek/archive/2009/12/04/102573.html</guid><wfw:comment>http://www.cppblog.com/Geek/comments/102573.html</wfw:comment><comments>http://www.cppblog.com/Geek/archive/2009/12/04/102573.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/Geek/comments/commentRss/102573.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Geek/services/trackbacks/102573.html</trackback:ping><description><![CDATA[<br><span style="background-color: #f0fff4; font-family: 黑体; color: #080000;">学习目的</span><span style="font-family: 黑体;"><span style="color: #080000;">：</span>掌握分治算法思想 </span><br style="font-family: 黑体;"><span style="font-family: 黑体;">&nbsp;</span><br style="font-family: 黑体;"><span style="font-family: 黑体;">学习要求：熟练运用分治算法思想解决以下问题</span><br style="font-family: 黑体;"><span style="font-family: 黑体;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #17be00;"> 1.二叉查找算法</span></span><br style="font-family: 黑体; color: #17be00;"><span style="font-family: 黑体; color: #17be00;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.查找最大最小值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><br style="font-family: 黑体; color: #17be00;"><span style="font-family: 黑体; color: #17be00;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.归并排序</span><br style="font-family: 黑体; color: #17be00;"><span style="font-family: 黑体; color: #17be00;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.快速排序</span><br style="font-family: 黑体; color: #17be00;"><span style="font-family: 黑体; color: #17be00;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.选择第k小元素</span><br style="font-family: 黑体; color: #17be00;"><span style="font-family: 黑体; color: #17be00;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6.大整数乘法</span><br style="font-family: 黑体;"><br style="font-family: 黑体;"><span style="font-family: 黑体;">
分治算法简介</span><br style="font-family: 黑体;"><span style="font-family: 黑体;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 分治算法也叫分治策略，把输入分为若干个部分，递归的解每一个问题，最后将这些子问题合并成为一个全局解。如果子问题较大，可以再次使用分治策略。</span><br style="font-family: 黑体;"><span style="font-family: 黑体;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由此可以得到分治策略解决的问题特点：</span><br style="font-family: 黑体;"><span style="font-family: 黑体;">&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;&nbsp; <span style="color: #17be00;">1.该问题的规模缩小到一定的程度就可以容易地解决；</span></span><br style="font-family: 黑体; color: #17be00;"><span style="font-family: 黑体; color: #17be00;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.该问题可以分解为若干个规模较小的相同问题;</span><br style="font-family: 黑体; color: #17be00;"><span style="font-family: 黑体; color: #17be00;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.分解出的子问题的解可以合并为原问题的解；</span><br style="font-family: 黑体; color: #17be00;"><span style="font-family: 黑体; color: #17be00;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.分解出的各个子问题是相互独立的。</span><br style="font-family: 黑体;"><span style="font-family: 黑体;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 大家已经看到划分出的自问题与原问题是一样的，那么我们设计算法的时候也就可以利用递归的编程技巧了！</span><br style="font-family: 隶书;">
<br><span style="color: #9080ff;">不想打字了，直接把PPT上传了</span><a href="http://www.cppblog.com/Files/Geek/Divd.rar">http://www.cppblog.com/Files/Geek/Divd.rar</a> （PPT中包含以上各个问题的分析很算法的代码）<br>  <img src ="http://www.cppblog.com/Geek/aggbug/102573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Geek/" target="_blank">Geek.tan</a> 2009-12-04 21:08 <a href="http://www.cppblog.com/Geek/archive/2009/12/04/102573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>0-1背包问题--动态规划解法</title><link>http://www.cppblog.com/Geek/archive/2009/12/02/102393.html</link><dc:creator>Geek.tan</dc:creator><author>Geek.tan</author><pubDate>Wed, 02 Dec 2009 08:11:00 GMT</pubDate><guid>http://www.cppblog.com/Geek/archive/2009/12/02/102393.html</guid><wfw:comment>http://www.cppblog.com/Geek/comments/102393.html</wfw:comment><comments>http://www.cppblog.com/Geek/archive/2009/12/02/102393.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Geek/comments/commentRss/102393.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Geek/services/trackbacks/102393.html</trackback:ping><description><![CDATA[<br>&nbsp;<span style="font-family: 微软雅黑;">问题描述：</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 给定n种物品和一背包，物品i的重量是wi，其价值为vi，背包的容量为C。问应如何选择装入背包的物品（物品不能分割），使得装入背包中物品的总价值最大?</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;抽象描述如下：</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp; x[n]:表示物品的选择，x[i]=1表示选择放进物品i到背包中。</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><img style="font-family: 微软雅黑;" alt="" src="http://www.cppblog.com/images/cppblog_com/geek/QQ.jpg" height="193" width="258"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;问题分析：</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.抽象之后背包问题转换为找到一个最优的数组，x1，x2，.....,xn的0-1序列。</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.假设最优解的序列为x1，x2，.....,xn，能使背包容量C的总价值最大.</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 如果，x1=1，则x2,...,xn是C-w1容量的背包的总价值<span style="color: red;">依然是</span>最大的序列；</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 如果，x1=0，则x2,....,xn是C容量的背包的总价值<span style="color: red;">依然是</span>最大的序列。</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="color: #ff0000;">这就是我们所说的最优子结构性质。</span></span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.进一步分析：我们用m(i,j)表示为已经判断好了i:n的序列的背包最大价值，并且此时的背包剩余的容量为j，对物品i进行判断</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果j&gt;wi, 就只要做出选择wi和不选择wi情况下，哪种更能使背包的总价值更大：m(i,j)=max{ m(i+1,j),m(i+1,j-wi)+vi}<span style="color: #3cff20;">(注意这是个递归式)</span></span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果j&lt;wi:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m(i,j)=m(i+1,j)</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 初始化：&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; m(n,j)=vn&nbsp; (j&gt;= wn)；</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m(n,j)=0&nbsp;&nbsp; (0&lt;=j&lt; wn) </span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m(0,C)=0&nbsp;&nbsp;&nbsp; </span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最终的结果：m(1,C)</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.依次我们就得到了一个递归的表达式：</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span><img style="font-family: 微软雅黑;" alt="" src="http://www.cppblog.com/images/cppblog_com/geek/2.jpg" height="126" width="524"> <br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5.如果单纯的从利用递归，重复计算了很多的值，耗费的时间是很大的，动态规划还需避免这种重复计算，怎样自顶向下或自底向上的计算呢？</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 采用列表的方法就可以很好的分析设计自顶向下或自底向上的计算的算法了 </span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;举例分析：</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; n=3,c=6,w={4,3,2} v={5,2,1}</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; m[i][j]=max{ m[i+1][j], m[i+1][j-w[i]]+v[i] }</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列表如下：</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><img style="font-family: 微软雅黑;" alt="" src="http://www.cppblog.com/images/cppblog_com/geek/3.jpg" height="267" width="742"><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最左边箭头：我们计算的方向，从第3行开始向上计算法值。</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表中红色箭头是我们通过选择做出的结果：列如 m[2][3]=max{m[3][3],m[3][3-w[2]]+v[2]}，我们最终选择了m[3][3-w[2]]+v[2]。</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 整个问题的最优解保存在m[1][6]中。</span><br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;代码实现：</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-family: 微软雅黑; font-size: 13px;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;">w[]:保存物品重量<br></span><span style="color: #008000;">//</span><span style="color: #008000;">v[]:保存物品价值<br></span><span style="color: #008000;">//</span><span style="color: #008000;">n:物品数目&nbsp;c:背包容量<br>//#define max(a,b) (((a) &gt; (b)) ? (a) : (b)) <br></span><span style="color: #008000;"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;KnapsackDP(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;c)<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j;<br>&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">初始化</span><span style="color: #008000;"><br></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(j</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;j</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">c;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(j</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">w[n])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m[n][j]</span><span style="color: #000000;">=</span><span style="color: #000000;">v[n];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">else</span><span style="color: #000000;"><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m[n][j]</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;"><br>&nbsp;&nbsp;&nbsp; for</span><span style="color: #000000;">&nbsp;(i</span><span style="color: #000000;">=</span><span style="color: #000000;">n</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;i</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">--</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;{<br>&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; </span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(j</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;j</span><span style="color: #000000;">&lt;=</span><span style="color: #000000;">c;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(j</span><span style="color: #000000;">&gt;=</span><span style="color: #000000;">w[i])<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; m[i][j]</span><span style="color: #000000;">=</span><span style="color: #000000;">max(m[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">][j],m[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">][j</span><span style="color: #000000;">-</span><span style="color: #000000;">w[i]]</span><span style="color: #000000;">+</span><span style="color: #000000;">v[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="color: #0000ff;">else</span><span style="color: #000000;">&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m[i][j]</span><span style="color: #000000;">=</span><span style="color: #000000;">m[i</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">][j];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; </span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;m[</span><span style="color: #000000;">1</span><span style="color: #000000;">][c];<br><br>}<br><br style="color: #05b210;"><span style="color: #05b210;">//构造选择序列x[],x[i]=1表示选择i号物品放到背包中，则x[i]=0表示不选择</span><br>void Creatx(int x[])<br>{<br>&nbsp;&nbsp;&nbsp; for (i=1;i&lt;n;i++)<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if (m[i][c]==m[i+1][c])<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;x[i]=0;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;{<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;x[i]=1;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;c-=w[i];<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; x[n]=m[n][c]?1:0;//m[n][C]==0则表示为没有选择第n号物品 <br>&nbsp; <br>}<br></span></div>
<br style="font-family: 微软雅黑;"><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">实战：</span><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp; HDOJ 2602&nbsp; </span><a style="font-family: 微软雅黑;" href="http://acm.hdu.edu.cn/showproblem.php?pid=2602">http://acm.hdu.edu.cn/showproblem.php?pid=2602</a><br style="font-family: 微软雅黑;"><span style="font-family: 微软雅黑;">&nbsp;&nbsp; &nbsp;&nbsp; </span><br><br><img alt="" src="file:///C:/Users/ADMINI~1.XIA/AppData/Local/Temp/moz-screenshot.png"><img alt="" src="file:///C:/Users/ADMINI~1.XIA/AppData/Local/Temp/moz-screenshot-1.png"><br> <img src ="http://www.cppblog.com/Geek/aggbug/102393.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Geek/" target="_blank">Geek.tan</a> 2009-12-02 16:11 <a href="http://www.cppblog.com/Geek/archive/2009/12/02/102393.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ACM竞赛学习菜鸟入门指南（一）：认识OJ与熟悉语言</title><link>http://www.cppblog.com/Geek/archive/2009/11/20/101522.html</link><dc:creator>Geek.tan</dc:creator><author>Geek.tan</author><pubDate>Fri, 20 Nov 2009 14:14:00 GMT</pubDate><guid>http://www.cppblog.com/Geek/archive/2009/11/20/101522.html</guid><wfw:comment>http://www.cppblog.com/Geek/comments/101522.html</wfw:comment><comments>http://www.cppblog.com/Geek/archive/2009/11/20/101522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Geek/comments/commentRss/101522.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Geek/services/trackbacks/101522.html</trackback:ping><description><![CDATA[<p style="font-family: 微软雅黑;">&nbsp;&nbsp; <span style="color: #339966;">声明：本指南专为对ACM感兴趣的的同学（学习过c/c++）提供的入门指南，旨在打好基础，要想在竞赛中取得好的成绩还需要各位同学自己学习更多的算法知识和做更多的练习。限于水平有限，本指南错误难免，还恳请大家提出，欢迎大家一起修改本指南内容以便于更好的学习。&nbsp;&nbsp;&nbsp;<br></span>&nbsp;&nbsp; <br>&nbsp;&nbsp; <span style="color: #ff0000;">学习要求：</span> 1.熟练运用C/C++语言进行编写程序.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.熟练使用在线评测系统环境(以HDOJ为例)。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.掌握OJ试题的常见输入和输出格式。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.掌握简单的调试技巧（以VC++ 6.0为例）。<br><br><span style="color: #ff00ff;">&nbsp;&nbsp;&nbsp;学习内容：</span>1.注册HDOJ账号，浏览首页 <a href="http://acm.hdu.edu.cn/faq.php">F.A.Q</a>&nbsp;和 <a href="http://acm.hdu.edu.cn/forum"><u><font color="#800080">Forum</font></u></a>，了解OJ基本要求与注意事项，学会在论坛里讨论学习。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.完成HDOJ以下试题： 1000 1089 1090 1091 1092 1093 1094 1095 1096<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.使用C/C++&nbsp;编写以下算法并实现。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.求最大公约数和最小公倍数。（欧几里得算法）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </p>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: 微软雅黑;">&nbsp;&nbsp;2.判断是否是闰年。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.素数检验。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.计算给定范围内素数的个数。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5.写出常见的集中排序算法：选择、冒泡、堆排序、归并排序、快速排序。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意分析算法的时间复杂度和空间复杂度<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4.VC++6.0简单的调试技巧<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.单步调试。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.断点调试。<br>.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.变量监视。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 详细资料大家可以上网查找资料学习。<br>&nbsp;<span style="color: #00ff00;">&nbsp;&nbsp;完成时间：</span><span style="color: #339966;">一周<br></span></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src ="http://www.cppblog.com/Geek/aggbug/101522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Geek/" target="_blank">Geek.tan</a> 2009-11-20 22:14 <a href="http://www.cppblog.com/Geek/archive/2009/11/20/101522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>顶点着色的Welch Powell方法</title><link>http://www.cppblog.com/Geek/archive/2009/10/15/98719.html</link><dc:creator>Geek.tan</dc:creator><author>Geek.tan</author><pubDate>Thu, 15 Oct 2009 13:26:00 GMT</pubDate><guid>http://www.cppblog.com/Geek/archive/2009/10/15/98719.html</guid><wfw:comment>http://www.cppblog.com/Geek/comments/98719.html</wfw:comment><comments>http://www.cppblog.com/Geek/archive/2009/10/15/98719.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/Geek/comments/commentRss/98719.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/Geek/services/trackbacks/98719.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 前些日子看了下&#8220;湖南省第二届大学生程序设计大赛&#8221;的一些题目，看到第三题的时候，没点什么思路，后来想了想像是图顶点着色的问题。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 又重新拾起了《离散数学》（哎呀，大一时候，没学好呀）书上介绍了 Welch Powell的方法进行着色。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 算法大致如下：<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.把图中的顶点按度数减小的次序排列<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.用第一种颜色对第一点着色，并且按排列次序，对前面着色点不相邻的每一点着上同样的颜色<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.把第二种颜色对尚未着色的点重复（2），用第三种颜色继续，直到所有点全部上色为止<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用c++实现如下:&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; width: 98%; font-size: 13px;"><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><span style="color: #000000;">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">iostream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">fstream</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">#include&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">algorithm</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">using</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">namespace</span><span style="color: #000000;">&nbsp;std;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;n;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;color[</span><span style="color: #000000;">100</span><span style="color: #000000;">];</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;顶点i涂得颜色</span><span style="color: #008000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;col_kinds;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;link[</span><span style="color: #000000;">100</span><span style="color: #000000;">][</span><span style="color: #000000;">100</span><span style="color: #000000;">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Nodes<br><img id="Codehighlighter1_161_276_Open_Image" onclick="this.style.display='none'; codehighlighter1_161_276_open_text.style.display="'none';" codehighlighter1_161_276_closed_image.style.display="'inline';" codehighlighter1_161_276_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_161_276_Closed_Image" onclick="this.style.display='none'; codehighlighter1_161_276_closed_text.style.display="'none';" codehighlighter1_161_276_open_image.style.display="'inline';" codehighlighter1_161_276_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_161_276_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_161_276_Open_Text"><span style="color: #000000;">{&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">:<br><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;">int</span><span style="color: #000000;">&nbsp;degree;<br><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;">int</span><span style="color: #000000;">&nbsp;index;<br><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;">bool</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">operator</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;Nodes&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n)<br><img id="Codehighlighter1_243_274_Open_Image" onclick="this.style.display='none'; codehighlighter1_243_274_open_text.style.display="'none';" codehighlighter1_243_274_closed_image.style.display="'inline';" codehighlighter1_243_274_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_243_274_Closed_Image" onclick="this.style.display='none'; codehighlighter1_243_274_closed_text.style.display="'none';" codehighlighter1_243_274_open_image.style.display="'inline';" codehighlighter1_243_274_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_243_274_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_243_274_Open_Text"><span style="color: #000000;">{<br><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;">return</span><span style="color: #000000;">&nbsp;degree</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">n.degree;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;cmp(</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;Nodes&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">m,</span><span style="color: #0000ff;">const</span><span style="color: #000000;">&nbsp;Nodes&nbsp;</span><span style="color: #000000;">&amp;</span><span style="color: #000000;">n)<br><img id="Codehighlighter1_320_348_Open_Image" onclick="this.style.display='none'; codehighlighter1_320_348_open_text.style.display="'none';" codehighlighter1_320_348_closed_image.style.display="'inline';" codehighlighter1_320_348_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_320_348_Closed_Image" onclick="this.style.display='none'; codehighlighter1_320_348_closed_text.style.display="'none';" codehighlighter1_320_348_open_image.style.display="'inline';" codehighlighter1_320_348_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_320_348_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_320_348_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"></span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;m.degree</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">n.degree;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top">Nodes&nbsp;p[</span><span style="color: #000000;">100</span><span style="color: #000000;">];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">bool</span><span style="color: #000000;">&nbsp;Check_ok(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;j)<br><img id="Codehighlighter1_393_614_Open_Image" onclick="this.style.display='none'; codehighlighter1_393_614_open_text.style.display="'none';" codehighlighter1_393_614_closed_image.style.display="'inline';" codehighlighter1_393_614_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_393_614_Closed_Image" onclick="this.style.display='none'; codehighlighter1_393_614_closed_text.style.display="'none';" codehighlighter1_393_614_open_image.style.display="'inline';" codehighlighter1_393_614_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_393_614_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_393_614_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;k;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(link[p[i].index][p[j].index]</span><span style="color: #000000;">!=</span><span style="color: #000000;">0</span><span style="color: #000000;">||</span><span style="color: #000000;">color[j]</span><span style="color: #000000;">!=</span><span style="color: #000000;">0</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;">相连的情况</span><span style="color: #008000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(k</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;k</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">j;k</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br><img id="Codehighlighter1_496_597_Open_Image" onclick="this.style.display='none'; codehighlighter1_496_597_open_text.style.display="'none';" codehighlighter1_496_597_closed_image.style.display="'inline';" codehighlighter1_496_597_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_496_597_Closed_Image" onclick="this.style.display='none'; codehighlighter1_496_597_closed_text.style.display="'none';" codehighlighter1_496_597_open_image.style.display="'inline';" codehighlighter1_496_597_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_496_597_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_496_597_Open_Text"><span style="color: #000000;">{<br><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;">if</span><span style="color: #000000;">(link[p[i].index][p[k].index]</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">link[p[k].index][p[j].index]</span><span style="color: #000000;">!=</span><span style="color: #000000;">0</span><span style="color: #000000;">)</span><span style="color: #008000;">//</span><span style="color: #008000;">与已经涂的点相连</span><span style="color: #008000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;Welech_Powell()<br><img id="Codehighlighter1_638_854_Open_Image" onclick="this.style.display='none'; codehighlighter1_638_854_open_text.style.display="'none';" codehighlighter1_638_854_closed_image.style.display="'inline';" codehighlighter1_638_854_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_638_854_Closed_Image" onclick="this.style.display='none'; codehighlighter1_638_854_closed_text.style.display="'none';" codehighlighter1_638_854_open_image.style.display="'inline';" codehighlighter1_638_854_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_638_854_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_638_854_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">n;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br><img id="Codehighlighter1_681_852_Open_Image" onclick="this.style.display='none'; codehighlighter1_681_852_open_text.style.display="'none';" codehighlighter1_681_852_closed_image.style.display="'inline';" codehighlighter1_681_852_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_681_852_Closed_Image" onclick="this.style.display='none'; codehighlighter1_681_852_closed_text.style.display="'none';" codehighlighter1_681_852_open_image.style.display="'inline';" codehighlighter1_681_852_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_681_852_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_681_852_Open_Text"><span style="color: #000000;">{<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(color[i]</span><span style="color: #000000;">==</span><span style="color: #000000;">0</span><span style="color: #000000;">)<br><img id="Codehighlighter1_705_844_Open_Image" onclick="this.style.display='none'; codehighlighter1_705_844_open_text.style.display="'none';" codehighlighter1_705_844_closed_image.style.display="'inline';" codehighlighter1_705_844_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_705_844_Closed_Image" onclick="this.style.display='none'; codehighlighter1_705_844_closed_text.style.display="'none';" codehighlighter1_705_844_open_image.style.display="'inline';" codehighlighter1_705_844_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_705_844_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_705_844_Open_Text"><span style="color: #000000;">{<br><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;color[i]</span><span style="color: #000000;">=++</span><span style="color: #000000;">col_kinds;<br><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;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(j</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">n;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br><img id="Codehighlighter1_758_839_Open_Image" onclick="this.style.display='none'; codehighlighter1_758_839_open_text.style.display="'none';" codehighlighter1_758_839_closed_image.style.display="'inline';" codehighlighter1_758_839_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_758_839_Closed_Image" onclick="this.style.display='none'; codehighlighter1_758_839_closed_text.style.display="'none';" codehighlighter1_758_839_open_image.style.display="'inline';" codehighlighter1_758_839_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_758_839_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_758_839_Open_Text"><span style="color: #000000;">{<br><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;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(Check_ok(i,j))<br><img id="Codehighlighter1_788_833_Open_Image" onclick="this.style.display='none'; codehighlighter1_788_833_open_text.style.display="'none';" codehighlighter1_788_833_closed_image.style.display="'inline';" codehighlighter1_788_833_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_788_833_Closed_Image" onclick="this.style.display='none'; codehighlighter1_788_833_closed_text.style.display="'none';" codehighlighter1_788_833_open_image.style.display="'inline';" codehighlighter1_788_833_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_788_833_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_788_833_Open_Text"><span style="color: #000000;">{<br><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;&nbsp;&nbsp;color[j]</span><span style="color: #000000;">=</span><span style="color: #000000;">col_kinds;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/None.gif" align="top"></span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;main()<br><img id="Codehighlighter1_868_1564_Open_Image" onclick="this.style.display='none'; codehighlighter1_868_1564_open_text.style.display="'none';" codehighlighter1_868_1564_closed_image.style.display="'inline';" codehighlighter1_868_1564_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_868_1564_Closed_Image" onclick="this.style.display='none'; codehighlighter1_868_1564_closed_text.style.display="'none';" codehighlighter1_868_1564_open_image.style.display="'inline';" codehighlighter1_868_1564_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top"></span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_868_1564_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_868_1564_Open_Text"><span style="color: #000000;">{&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i,j,e,k;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;ifstream&nbsp;fin(</span><span style="color: #000000;">"</span><span style="color: #000000;">input.txt</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">(fin</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">n</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">e)<br><img id="Codehighlighter1_936_1548_Open_Image" onclick="this.style.display='none'; codehighlighter1_936_1548_open_text.style.display="'none';" codehighlighter1_936_1548_closed_image.style.display="'inline';" codehighlighter1_936_1548_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_936_1548_Closed_Image" onclick="this.style.display='none'; codehighlighter1_936_1548_closed_text.style.display="'none';" codehighlighter1_936_1548_open_image.style.display="'inline';" codehighlighter1_936_1548_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_936_1548_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_936_1548_Open_Text"><span style="color: #000000;">{&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;col_kinds</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(link,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(link));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;memset(color,</span><span style="color: #000000;">0</span><span style="color: #000000;">,</span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(color));<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(k</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;k</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">e;k</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br><img id="Codehighlighter1_1059_1116_Open_Image" onclick="this.style.display='none'; codehighlighter1_1059_1116_open_text.style.display="'none';" codehighlighter1_1059_1116_closed_image.style.display="'inline';" codehighlighter1_1059_1116_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_1059_1116_Closed_Image" onclick="this.style.display='none'; codehighlighter1_1059_1116_closed_text.style.display="'none';" codehighlighter1_1059_1116_open_image.style.display="'inline';" codehighlighter1_1059_1116_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_1059_1116_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_1059_1116_Open_Text"><span style="color: #000000;">{<br><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;fin</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">i</span><span style="color: #000000;">&gt;&gt;</span><span style="color: #000000;">j;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;link[i][j]</span><span style="color: #000000;">=</span><span style="color: #000000;">link[j][i]</span><span style="color: #000000;">=</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">n;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br><img id="Codehighlighter1_1147_1228_Open_Image" onclick="this.style.display='none'; codehighlighter1_1147_1228_open_text.style.display="'none';" codehighlighter1_1147_1228_closed_image.style.display="'inline';" codehighlighter1_1147_1228_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_1147_1228_Closed_Image" onclick="this.style.display='none'; codehighlighter1_1147_1228_closed_text.style.display="'none';" codehighlighter1_1147_1228_open_image.style.display="'inline';" codehighlighter1_1147_1228_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_1147_1228_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_1147_1228_Open_Text"><span style="color: #000000;">{&nbsp;&nbsp;&nbsp;<br><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;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(j</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">n;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br><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;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">link[i][j]</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br><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;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">--</span><span style="color: #008000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">n;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br><img id="Codehighlighter1_1271_1382_Open_Image" onclick="this.style.display='none'; codehighlighter1_1271_1382_open_text.style.display="'none';" codehighlighter1_1271_1382_closed_image.style.display="'inline';" codehighlighter1_1271_1382_closed_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top"><img style="display: none;" id="Codehighlighter1_1271_1382_Closed_Image" onclick="this.style.display='none'; codehighlighter1_1271_1382_closed_text.style.display="'none';" codehighlighter1_1271_1382_open_image.style.display="'inline';" codehighlighter1_1271_1382_open_text.style.display="'inline';"" src="http://www.cppblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="border: 1px solid #808080; background-color: #ffffff; display: none;" id="Codehighlighter1_1271_1382_Closed_Text"><img src="http://www.cppblog.com/Images/dot.gif"></span><span id="Codehighlighter1_1271_1382_Open_Text"><span style="color: #000000;">{&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].index</span><span style="color: #000000;">=</span><span style="color: #000000;">i;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;p[i].degree</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;<br><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;">for</span><span style="color: #000000;">(j</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;j</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">n;j</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br><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;p[i].degree</span><span style="color: #000000;">+=</span><span style="color: #000000;">link[i][j];<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sort(p,p</span><span style="color: #000000;">+</span><span style="color: #000000;">n,cmp);<br><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;Welech_Powell();<br><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;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">col_kinds</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br><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;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">;i</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">n;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)<br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cout</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">p[i].index</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">color[i]</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&lt;&lt;</span><span style="color: #000000;">endl;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000;"><br><img src="http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif" align="top">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;<br><img src="http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top">}</span></span></div><img src ="http://www.cppblog.com/Geek/aggbug/98719.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/Geek/" target="_blank">Geek.tan</a> 2009-10-15 21:26 <a href="http://www.cppblog.com/Geek/archive/2009/10/15/98719.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>