学习《算法竞赛入门经典》
我的C语言入门之书——《算法竞赛入门经典》(刘汝佳编著),认为这本书所讲内容非常基础、详细,适合初学者使用。此书代码最大的特点就是简洁、算法十分巧妙,其他书上几十行代码在此书上可能一行就能就决,但有时也往往弄巧成拙,一段本来非常简单的代码会由于想写得简短被弄得相当复杂。下面先指出这本书上几处印刷错误:
p24,最后一行,“然后让max=INF,而min=-INF”应改为“然后让max=-INF,而min=INF”。原因:“由于min保存的是最小值,它的初值应该是一个很大的数;反过来,max的初值应该是一个很小的数。”
P54,第一行,“很不幸:m=20,n=1的输出竟然是-19。手算不难得到:m=20,n=1的正确结果是1。”应改为“很不幸:m=1,n=20的输出竟然是-19。手算不难得到:m=1,n=20的正确结果是1。”(“手算”?其实我是口算的,哈哈)
P71,5.1.3周期串中循环语句“for(int i = 1; i <= len; j++)”应改为“for(int i = 1; i <= len; i++)”(注意:此书中c与c++混合使用,在c中“for(int i = 1; i < n; i++)”是错误的,变量i要在for语句前申明,但在c++中是可以的。)
P102,倒数第二行,“typedef struct Tnode”应改为“typedef struct TNode”。
P103,addnode函数代码中,变量n与全局变量n冲突。(详细可参见此题完整代码)
P107,dfs函数代码中,第二个“dfs(x - 1, y)”应改为“dfs(x, y - 1)”(不难发现dfs函数中的调用几个dfs是按照“八连块”的位置排列的)。
不能保证此处已列出所有错误。
《算法竞赛入门经典》一共分成三个部分,第一部分比较简单,学起来相对轻松;第二部分涉及算法就有些难度了,需花较多精力来研究研究,而且“树”、“图”、“回溯法”等算法和第三部分相关;第三部分难度偏大,有些内容还不适合初学者深入研究,不过我认为学好第一、二部分就算已经入门C语言了,第三部分稍作了解,学会第10章动态规划初步就很不错了(我自己现在都还没搞懂)。
还有一本《算法竞赛入门经典训练指南》,听“师兄”说上面例题真心好!鼓励看看练练!


