计算机图论知识,计算机图论知识恶补瀚哥版精选.doc

目录

引语2

步骤2

正文1:基本数据结构3

线性表3

1. 线性表介绍3

2. 顺序表:向量4

3. 链表4

栈,队列7

1. 栈虚基类(Stack.h)7

2. 顺序栈和链式栈(Stack.cpp)8

3. 顺序队列9

4. 链式队列10

正文2:图背景11

历史(摘自wiki)11

柯尼斯堡的七桥11

骑士周游问题11

环游世界游戏12

四色问题13

应用14

正文3:图的表示14

图定义14

图术语14

邻接矩阵17

邻接表17

图的抽象数据结构18

具体代码实现参见参考18

参考19

图代码24

凡事没有绝对,一切皆有可能

组员:陈锦瀚 何游敏 苏江吟 方桂凯

(排名不分先后)

时间:2014年3月18日图算法讲义

引语

一切的理论都是为现实服务的。计算机的出现解决了人脑的限制,人脑不够快!《人脑与机器》说:机器的智慧不会超过人的智慧。机器就是人造的,我们用一道程序来模拟我们的思考并求出结果。人脑异常复杂,经常有第六感等超自然感觉,还可以并行地做好几件事,如:可以眼睛一边看电视,一边在洗脚,一边还在吃花生,更重要的是他竟然在和同学说话,脑袋里却在想他的女朋友。无疑,人类是有想法的很聪明的懒人:一:计算机代替人,可以提高工作效率。二:换句话,你就解放了,可以翘着腿喝咖啡,等结果。

但是!机器不知怎么做,你要教他,而且还要教得很好,故有了程序。第一:程序应该达到预期的结果,不能出错。第二:必须很快得到结果,否则你就要喝咖啡好几百年了,因为一个坏的教导会不停运行直到地老天荒。怎么办?答案:想好的算法,好的算法又要好的数据结构。

人是不能满足的高等动物,渴望我要快,更快,再快的节奏!于是,一代代又一代人研究算法,给出各种算法复杂度分析:渐进符号,程序测试等,励志突破前人,名垂千古。当然,说白了,他们是没什么事做,也只能做那件事,这就是所谓的社会分工。不要鄙视程序猿!一个不调侃自己的程序猿不是好的程序猿,一个不直面惨淡程序的程序猿也不是好的程序猿。好吧,让我们来挠腮抓头吧,进入今天的图讲解。图高端,大气,上档次,所以会讲很长很长,还会提供c++代码支持。提供c++代码原因:第一:类c,面向对象,群众基础深。第二:我喜欢。(我自己喷自己,建议改为JAVA).

一部图论就是一部计算机的心酸苦难史。所以,由我们组来讲解有关图的各种复杂关系,让我们来一场心与心的碰撞吧!以下讲义以大白话为主,不喜勿喷。

步骤

程序=算法+数据结构。我们由该公式开始讲解。

图论背景:图论来源于现实的抽象,把一些东西(object)当成点,以线连接点,这就是连小孩子都会理解的图论。为了便于解决问题:如走迷宫问题,旅行商旅行问题,找最短旅行路径问题,找最便宜旅行路径问题,找你祖宗十几代问题,考试安排问题,座位协调问题,手机无线电通讯问题,水资源调运问题,最重要的是找女朋友问题。所以,图论被扩充,定义了很多的术语,目的就是解决相应的问题。注:术语该出现的时候他自然会出现。

数据结构:为了便于在计算机中实现程序,所以要编程。从机器语言到汇编语言,再到高级语言,这些语言指导计算机做事。有一种病叫做:代码恐惧症,但是你一直会看到代码!一幅图怎么用计算机表示?抽象!怎么抽象?邻接表和邻接矩阵,而邻接矩阵和邻接表由数组和指针实现。所以有必要先介绍线性表:向量和链表,然后介绍栈和队列。而树结构,树实际上是一种特殊的图,而图也就成为最顶层的数据结构,其重要性不言而喻。以下将会用代码讲述各种数据结构,这是讲图算法的基础,超级啰嗦,不喜勿喷。

算法:实现了伟大的数据结构后,还要会用这些数据结构。Dijkstra算法(单源最短路径),Floyd算法(多源最短路径),Prim算法,Kruskal算法(最小生成树MST)已经吓退你了吧!我们会利用DFS(深度搜索)和BFS(广度搜索)以及构造的拓扑排序来实现这些算法。DFS和BFS由栈和队列实现,采用递归方法。

授课人群:接受过九年义务教育,有基本的理性和一点点的感性(可以喷我),喜欢数学(这个学科需要思维灵敏,不喜欢数学,没问题!不过,不喜欢,可以去爱嘛!)的广大的计算机爱好者。借用俺母校校训:勤奋,活泼,求实,向上。

授课基础:计算机科学导论(知道计算机基本结构),数学(一年级到十二年级),程序设计(C,C++,JAVA,PYTHON,VB,会打码),数据结构,英语(过了四级就好),心理学(心里素质必须硬)。

惨无人道的授课开始,进入正文1或者跳到正文3!都是讲数据结构的!

正文1:基本数据结构

线性表

数据的组织形式!

1. 线性表介绍

线性表是由有限节点集N,以及定义在N上的线性关系r所组成的线

你可能感兴趣的:(计算机图论知识)