Loading

摘要: Dijkstra算法算法流程:(a) 初始化:用起点v到该顶点w的直接边(弧)初始化最短路径,否则设为∞;(b) 从未求得最短路径的终点中选择路径长度最小的终点u:即求得v到u的最短路径;(c) 修改最短路径:计算u的邻接点的最短路径,若(v,…,u)+(u,w)<(v,…,w),则以(v,…,u,w)代替。(d) 重复(b)-(c),直到求得v到其余所有顶点的最短路径。特点:总是按照从小到大的顺序求得最短路径。假设一共有N个节点,出发结点为s,需要一个一维数组prev[N]来记录前一个节点序号,一个一维数组dist[N]来记录从原点到当前节点最短路径(初始值为s到Vi的边的权值,没有则 阅读全文
posted @ 2012-08-04 16:14 阿凡卢 阅读(7726) 评论(0) 推荐(1) 编辑
摘要: 1.DFS(深度优先搜索)深度优先搜索算法(Depth-First-Search),是搜索算法的一种。它沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节... 阅读全文
posted @ 2012-08-04 16:02 阿凡卢 阅读(28337) 评论(0) 推荐(7) 编辑
摘要: 1、后序表达式求值:后续表达式(逆波兰式)的特点:没有括号。求值方法:从前向后扫,遇到操作数压栈;遇到操作符,从栈中取出2个操作数运算,结果压栈。最终栈中所剩的数为结果。2、中序表达式求值我们先来定义运算符的优先级:(+,-*,/,%从上到下依次升高准备2个栈,一个专门存放运算符,另一个专门存放操作数。1.遇到),那么退栈计算到(为止.结果压栈。2.遇到运算数.那么压栈。3.如果当前运算符优先级低于栈顶运算符.那么计算栈顶运算符并将结果压栈.4.否则压栈.计算带括号和浮点数的表达式:View Code #include<iostream> #include<stack> 阅读全文
posted @ 2012-08-04 12:34 阿凡卢 阅读(7952) 评论(0) 推荐(1) 编辑
摘要: 1.判断二叉树是否平衡//求树的高度int TreeDepth(Node* t){ int hl,hr,h; if(t != NULL) { hl = TreeDepth(t->left); hr = TreeDepth(t->right); h = hl>hr? hl:hr; return h+1; } return 0;}//判断二叉树是否平衡int isBalanced(Node* t) { if(t==NULL) return 1; int leftDepth = TreeDepth... 阅读全文
posted @ 2012-08-04 12:10 阿凡卢 阅读(6762) 评论(0) 推荐(1) 编辑
摘要: 二叉树的基本操作,都使用递归://二叉树 class Node { public: char data; Node *left; Node *right; Node():data(' '),left(NULL),right(NULL){} Node(char ch):data(ch),left(NULL),right(NULL){} }; //广义表建立二叉树,输入:A(B(D,E(G,)),C(,F))* void CreateBinTree(Node* & Root,char *str) { stack<... 阅读全文
posted @ 2012-08-04 11:52 阿凡卢 阅读(1918) 评论(0) 推荐(0) 编辑
摘要: 题目:定义栈的数据结构,要求添加一个min函数,能够得到栈的最小元素。要求函数min、push以及pop的时间复杂度都是O(1)。分析:这是google的一道面试题。看到这道题目时,第一反应就是每次push一个新元素时,将栈里所有逆序元素排序。这样栈顶元素将是最小元素。但由于不能保证最后push进栈的元素最先出栈,这种思路设计的数据结构已经不是一个栈了。在栈里添加一个成员变量存放最小元素(或最小元素的位置)。每次push一个新元素进栈的时候,如果该元素比当前的最小元素还要小,则更新最小元素。乍一看这样思路挺好的。但仔细一想,该思路存在一个重要的问题:如果当前最小元素被pop出去,如何才能得到下 阅读全文
posted @ 2012-08-04 10:47 阿凡卢 阅读(1056) 评论(0) 推荐(0) 编辑
摘要: //优先级队列实现的哈夫曼树的编码和译码 #include<iostream> #include<queue> #include<string> using namespace std; class Node { public: float weight; Node* left; Node* right; char ch; Node(float w,Node* l=NULL,Node* r=NULL,char c=' '):weight(w),ch(c... 阅读全文
posted @ 2012-08-04 10:10 阿凡卢 阅读(1346) 评论(0) 推荐(0) 编辑