本书以提高读者程序设计和问题求解的能力为目的,它不是高级程序设计语言的专门教科书;为适应教学也没有应用面向对象的设计和封装方法。但是以实例讲解为主,强调程序设计语言的灵活使用,全面地应用C/C++程序设计中有关知识,以及数据结构和算法设计中的大量算法,使学生学得活,一学就能编程。本书涉及程序设计基础、数值计算、数论、组合数学、一般图论、计算几何、网络流等知识领域,应用高精度计算、贪心、分治、动态规划、搜索等算法解决程序设计中的许多问题。书中的有关章节可独立使用,教师可选择部分章节进行教学,学生也可选择感兴趣的内容自习。
本书介绍ACM国际大学生程序设计竞赛概况及程序设计基础,系统介绍数论、组合数学、动态规划、计算几何、搜索、图论和网络流等专题的典型算法,挑选历年竞赛中许多有代表性的竞赛题作为例题进行分析,便于学生编程时模仿学习。每章的例题和习题都配有输入输出样例,方便学生在编程时测试与调试程序。本书以C++为程序设计语言,以提高编程能力为目标,按照由浅人深、循序渐进的原则编写。
本书不仅适合于计算机专业的学生,也适合于非计算机专业的学生。本书是问题求解性自主式学习的程序设计教材,也是学习数据结构与算法设计与分析的参考教材,还可以作为ACM国际大学生程序设计竞赛的参考书。
第1章 ACM国际大学生程序设计竞赛简介
1.1 ACM国际大学生程序设计竞赛概况
1.2 ACM国际大学生程序设计竞赛组织形式简介
1.3 程序设计对学生的要求
1.4 程序设计语言选择
1.5 ACM程序设计竞赛题形式
习题1
第2章 程序设计基础
2.1 程序设计概述
2.2 算法基础
2.3 程序设计的输人输出形式
2.4 C++文件操作
2.5 输人输出格式控制
2.6 排序
2.7 简单应用
习题2
第3章 程序设计简单问题
3.1 ACM/ICPC程序设计竞赛的题型
3.2 简单例子
习题3
第4章 高精度计算与代数计算
4.1 高精度计算
4.2 高精度四则运算应用
4.3 代数计算
4.4 实例研究
习题4
第5章 数论中的程序设计
5.1 从跳兽问题谈起
5.2 最大公因数与最小公倍数
5.3 利用欧几里得算法求整系数一次不定方程ax+by=c的解
5.4 求解模线性方程
5.5 求modrn的逆元素算法
5.6 模线性方程组与中国剩余定理
5.7 模幂运算与素数测试
5.8 二次剩余与Pell方程
5.9 实例研究
习题5
第6章 组合数学中的程序设计
6.1 组合数学中有关概念与公式
6.2 实例研究
习题6
第7章 动态规划
7.1 动态规划原理
7.2 实例研究
习题7
第8章 计算几何学
8.1 几何基本知识
8.2 基本算法
8.3 凸包
8.4 实例研究
习题8
第9章 搜索算法
9.1 广度优先搜索
9.2 深度优先搜索
9.3 双向广度优先算法
9.4 A算法
9.5 实例研究
习题9
第10章 一般图论中的程序设计
10.1 图论算法基础
10.2 实例研究
习题10
第11章 网络流与二分图
11.1 网络与流
11.2 二分图匹配
11.3 实例研究
习题11
第12章 杂例
12.1 常用的有关算法
12.2 实例研究
习题12
附录A 程序设计竞赛过程和PC2竞赛系统使用
附录B 八数码问题的C++语言实现程序
D1 双向广度优先算法求解八数码问题的程序
B2 八数码问题的A算法C++语言实现程序
参考文献