《ACM/ICPC程序设计与分析(C++实现)》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:沈云付编著
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2010
  • ISBN:9787302223733
  • 页数:399 页
图书介绍:本书介绍ACA国际大学生程序设计竞赛概况及程序设计基础,系统介绍数论、组合数论、动态规划、计算几何、搜索、图论和网络流等专题的典型算法,挑选历年竞赛中许多有代表性的竞赛题作为例题进行分析,便于学生编程时模仿学习。

第1章 ACM国际大学生程序设计竞赛简介 1

1.1 ACM国际大学生程序设计竞赛概况 1

1.2 ACM国际大学生程序设计竞赛组织形式简介 1

1.2.1 组队方式和比赛形式 1

1.2.2 竞赛环境 2

1.2.3 判题结果 2

1.2.4 递交与评判 2

1.3 程序设计对学生的要求 3

1.4 程序设计语言选择 3

1.5 ACM程序设计竞赛题形式 5

习题1 8

第2章 程序设计基础 9

2.1 程序设计概述 9

2.2 算法基础 9

2.2.1 算法概述 9

2.2.2 算法复杂性 10

2.2.3 演绎方法的使用 10

2.2.4 演绎法算法设计举例 11

2.3 程序设计的输入输出形式 13

2.4 C++文件操作 15

2.5 输入输出格式控制 19

2.5.1 流基类ios层次图 19

2.5.2 非格式化抽取 20

2.5.3 操纵算子 20

2.6 排序 23

2.6.1 冒泡排序 23

2.6.2 快速排序 24

2.7 简单应用 25

2.7.1 转换十六进制数 25

2.7.2 颠倒原文 26

2.7.3 指定个数的整数求和 27

2.7.4 不指定个数的整数求和 28

习题2 30

第3章 程序设计简单问题 32

3.1 ACM/ICPC程序设计竞赛的题型 32

3.2 简单例子 32

3.2.1 空格字符与非空格字符统计 32

3.2.2 荷兰国旗问题 34

3.2.3 城市间的球面距离 36

3.2.4 合并电话簿 39

3.2.5 图书排序问题 42

习题3 44

第4章 高精度计算与代数计算 50

4.1 高精度计算 50

4.1.1 基本知识 50

4.1.2 高精度数据的处理方法 50

4.1.3 高精度四则运算的基本处理方法 54

4.2 高精度四则运算应用 59

4.2.1 A+B问题 59

4.2.2 公牛和母牛 59

4.2.3 A—B问题 61

4.2.4 计算余数问题 62

4.3 代数计算 65

4.4 实例研究 70

4.4.1 指数函数值 70

4.4.2 是金还是银 71

4.4.3 p倍和子集问题 74

4.4.4 杨辉三角形 76

4.4.5 黑白棋游戏 77

习题4 79

第5章 数论中的程序设计 85

5.1 从跳兽问题谈起 85

5.2 最大公因数与最小公倍数 86

5.2.1 公因数和最大公因数的概念 86

5.2.2 最小公倍数 87

5.2.3 欧几里得算法 87

5.3 利用欧几里得算法求整系数一次不定方程ax+by=c的解 88

5.4 求解模线性方程 90

5.4.1 模和同余 90

5.4.2 模线性方程 91

5.5 求mod m的逆元素算法 92

5.6 模线性方程组与中国剩余定理 93

5.7 模幂运算与素数测试 95

5.7.1 模幂运算 95

5.7.2 素数测试 96

5.8 二次剩余与Pell方程 97

5.8.1 二次剩余 97

5.8.2 Pell方程 98

5.9 实例研究 99

5.9.1 Magic Horse 99

5.9.2 阶乘问题 101

5.9.3 邮票问题 102

5.9.4 Josephus问题 104

5.9.5 负数进制转换 107

5.9.6 数塔问题 109

5.9.7 幸运数 111

5.9.8 哥德巴赫猜想 114

习题5 117

第6章 组合数学中的程序设计 123

6.1 组合数学中有关概念与公式 123

6.1.1 排列与组合及有关的生成算法 123

6.1.2 母函数 129

6.1.3 容斥原理与错排 131

6.1.4 P?lya定理 132

6.2 实例研究 134

6.2.1 蛋糕 134

6.2.2 杨辉三角形中的奇偶问题 136

6.2.3 足球赛票 140

6.2.4 棋盘格数 141

6.2.5 保险柜上锁 142

6.2.6 弹球游戏 143

6.2.7 最少砝码 144

6.2.8 环 146

6.2.9 珍珠项链 147

6.2.10 统计棋局数 150

习题6 154

第7章 动态规划 160

7.1 动态规划原理 160

7.2 实例研究 161

7.2.1 游船费问题 161

7.2.2 航线设置 164

7.2.3 复制书稿 166

7.2.4 括号序列 168

7.2.5 整数匹配问题 171

7.2.6 生日蛋糕 174

7.2.7 乘积最大 175

7.2.8 多边形计算 177

习题7 181

第8章 计算几何学 186

8.1 几何基本知识 186

8.1.1 矢量的概念 186

8.1.2 矢量加减法 186

8.1.3 矢量叉积 187

8.1.4 折线段的拐向判断 187

8.1.5 判断点是否在线段上 188

8.1.6 跨立试验与判断两线段是否相交 188

8.1.7 整数点与Pick定理 189

8.2 基本算法 190

8.3 凸包 193

8.3.1 凸包的概念与实例 193

8.3.2 Graham扫描法 194

8.3.3 Jarvis步进法 195

8.3.4 Graham扫描法与Jarvis步进法的程序实现 195

8.4 实例研究 200

8.4.1 有缺陷的卫星 200

8.4.2 篱笆 202

8.4.3 处于危险之中的飞行员 205

8.4.4 穿街走巷 206

8.4.5 三角形 209

习题8 211

第9章 搜索算法 216

9.1 广度优先搜索 216

9.1.1 广度优先搜索思想 216

9.1.2 广度优先搜索算法框架 217

9.1.3 广度优先搜索算法实现过程 217

9.2 深度优先搜索 218

9.2.1 深度优先搜索思想 218

9.2.2 深度优先搜索算法实现过程 218

9.2.3 子集树问题和排列树问题——DFS算法框架 219

9.3 双向广度优先算法 220

9.3.1 双向广度搜索的概念 220

9.3.2 双向广度搜索算法 221

9.4 A*算法 223

9.4.1 A*算法概述 223

9.4.2 A*算法框架 224

9.5 实例研究 225

9.5.1 数的划分 225

9.5.2 通信团体 226

9.5.3 惹事的青蛙 229

9.5.4 子集和问题 232

9.5.5 相异数字序列问题 235

9.5.6 方圆迷宫游戏 241

9.5.7 开关网络 245

9.5.8 油田 250

9.5.9 八数码问题 252

习题9 257

第10章 一般图论中的程序设计 265

10.1 图论算法基础 265

10.1.1 连通性 265

10.1.2 最小生成树 270

10.1.3 最短路径 274

10.1.4 有向图的传递闭包 278

10.1.5 回路问题 278

10.1.6 Bellman-Ford算法与负权回路 279

10.1.7 第n最短路径问题 279

10.2 实例研究 280

10.2.1 无向图的连通分支 280

10.2.2 兵家必争之地 281

10.2.3 交通要道 284

10.2.4 有向图的强连通分支 286

10.2.5 师生树 289

10.2.6 股票经纪人谣言传播 291

10.2.7 丛林小路 294

10.2.8 多边形游戏 297

10.2.9 救火车 299

10.2.10 游戏 302

10.2.11 酒厂选址 303

习题10 305

第11章 网络流与二分图 313

11.1 网络与流 314

11.1.1 网络流基本概念 314

11.1.2 增广路算法 315

11.1.3 求最大流的标号法——Ford-Fulkerson方法 317

11.2 二分图匹配 318

11.2.1 问题 318

11.2.2 二分图与匹配 318

11.2.3 二分图最大匹配问题网络流算法 319

11.2.4 二分图最大匹配问题的匈牙利算法 319

11.2.5 最小点覆盖与最小路径覆盖 322

11.2.6 二分图最优匹配 324

11.3 实例研究 326

11.3.1 物流运输问题 326

11.3.2 电力网络 328

11.3.3 课程 330

11.3.4 小行星 332

11.3.5 男生和女生 334

11.3.6 最小路径覆盖 336

11.3.7 运动员最佳匹配 338

习题11 341

第12章 杂例 349

12.1 常用的有关算法 349

12.2 实例研究 350

12.2.1 方圆游戏 350

12.2.2 删数游戏 351

12.2.3 雷达安装 353

12.2.4 友好数 356

12.2.5 移动火柴 357

12.2.6 逆波兰式 359

12.2.7 分型 360

12.2.8 手机菜单 363

12.2.9 多项式构造问题 364

12.2.10 Petri网络模拟 366

12.2.11 奇异的结构 370

习题12 375

附录A 程序设计竞赛过程和PC2竞赛系统使用 383

附录B 八数码问题的C++语言实现程序 386

B1 双向广度优先算法求解八数码问题的程序 386

B2 八数码问题的A*算法C++语言实现程序 391

参考文献 397