
张昆 戴艳
本书分上、下两篇,共10章。第1~5章介绍了常用算法和数据结构的相应代码,第6~8章介绍了使用数据结构和算法解决一些经典问题的程序,第9章介绍了部分信息学奥赛试题的解题代码,第10章给出了与算法和数据结构相关的常见面试题。
计算卒的路线 【问题描述】 在中国象棋中,卒过了界河以后不仅可以向前移动,也可以横向移动。现在假设有一个过河的卒位于图9-3所示的A点,要使该卒从A点移到B点(目标位置)可有多少种不同的路线? [插图] 图9-3 卒的路线 在图9-3中还有一个对方的马位于C点,如果卒走到对方马的位置或马的控制范围(P1~P8),则会被马吃掉,因此卒在从A点到B点的过程中,必须要绕过对方马的控制点。 为了简化程序,本例假设卒只能向下和向右走,而不能向左和向上走;且对方马的位置也是不允许通过的。 在本例的输入文件中,用坐标来表示棋盘中各棋子的位置,A点为坐标原点(0,0),B点(n,m)为目标点(m、n的值不超过20),C点坐标(x,y)。出发位置A、目标位置B、对方马的位置C这3个坐标各不相同。 【输入文件】 输入文件soldier.in只有一行数据,共有4个整数,各数用空格分开,分别表示目标位置B点的坐标(n,m)和对方马的坐标(x,y),保证这些数据都是有效的。 【输出文件】 输出文件soldier.out包括一行,这一行只包含一个数字,该数表示卒从A点能够到达B点的路径的条数。 【输入样例】 7 7 3 3 【输出样例】 40 【问题分析】 本题是一道很经典的试题,许多地方都可看到类似的试题。对于本题的求解,首先想到的解题方法应该是用搜索来求解,但是,当B点的坐标位置离A点较远时,搜索操作的效率要大大降低。 换一种思路,对题的已知条件进行分析可发现,由于卒只能向右和向下走,要想从A点到达B点,只能从左边向右走或是从上面向下走。根据加法原理,到达B点的路径条数,应等于到达B点上方和左方两点的路径数目之和,通过递推方法即可计算出从A点到B点的路径条数了。 在从A点到B点的过程中,还必须绕过对方马所控制的9个点(若马在边上,将少于9个控制点),要达到绕过对方马的位置,只要将从A点到达该点的路径数目置为0即可。 程序中使用二维数组chessboard表示棋盘各点的状态,若某个点为对方马的控制点,则设置对应数组元素的值为-1,若从A点到某个点的路径数量有3条,则在对应数组元素中保存数3。通过循环程序对二维数组各元素进行扫描判断,最后即可得到从A点到达B点的路径条数。
挺好的书📚,也买了送自己。但是统计不开心❤️的例子🌰用学习时间长短判断,不能原谅。从起床到睡觉之间都在学习,开心得不得了,怎么回事?学习本事就是快乐的,态度很重要,搞错了才不开心,作者不要误导、加重某部分读者错误的态度。
优点是例题多,缺点是对显而易见的部分解说,没有解说难点。
概念化的了解基本算法的理论概念,对于算法数据,奥数,程序代码等领域深耕行业可实践操作参考应用。 以通俗易懂的方式,帮助没有算法基础的读者逐步理解并掌握算法的核心概念与应用。它从最基础的算法思想讲起,如排序、搜索等,详细阐述每个算法的原理、实现步骤及复杂度分析。搭配丰富的代码示例,涵盖多种常见编程语言,如Python、C++ 等,方便读者通过实际编程加深对算法的理解。同时,通过大量生动有趣的案例和练习题,将算法知识应用于解决实际问题,逐步培养算法思维和编程能力。
写得挺好的,简单易懂,非常适合零基础或者基础差的读者看
阅读了基本的算法思想,学习了不同数据结构,以及排序和查找等一系列算法。对自己的知识结构有所加深。