- 浏览: 223933 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (163)
- c++ (30)
- JavaScript (30)
- java (61)
- jQuery (3)
- ACE (2)
- oracle (9)
- jni (0)
- android (2)
- shell (1)
- myeclipse (1)
- Hibernate (1)
- linux (2)
- sqlserver (2)
- windows (2)
- sql (2)
- php (2)
- css (1)
- 学习 (1)
- ExtJs (1)
- RSS (1)
- 报文 (1)
- 跟我学Spring3 (6)
- dos (1)
- server (1)
- nosql (4)
- mongodb (6)
- photoshop (1)
- WebService (2)
- 股票 (1)
- OpenGL (3)
- Spring3MVC (6)
- 生活 (1)
- struts2 (1)
- 云盘 (1)
- blog (1)
- nosql nodejs mongoose (1)
最新评论
-
sblig:
配置分片: mongo -port 27017config ...
搭建Mongodb集群:分片Sharding+副本集Replica Set -
sblig:
配置路由:mongs: 40000 40100 40200sc ...
搭建Mongodb集群:分片Sharding+副本集Replica Set -
fuanyu:
哥们,干得漂亮。。
struts2 高危漏洞修复 -
sblig:
配置列子如下
<?xml version="1 ...
跟我学Spring3 学习笔记一 -
sblig:
307622798 写道博主你好,最近在看你的js系列文章,发 ...
JavaScript 学习笔记 二 对象的访问
/********************广度优先遍历算法*******************/ void BFSTraverse(Graph G, Status (*Visit)(int v)) { // 按广度优先非递归遍历图G。使用辅助队列Q和访问标志数组visited。 for (v=0; v<G.vexnum; ++v) visited[v] = FALSE; InitQueue(Q); // 置空的辅助队列Q for ( v=0; v<G.vexnum; ++v ) if (!visited[v]) { EnQueue(Q, v); //入队 visited[u] = TRUE; Visit(u); //访问 while (!QueueEmpty(Q)) { DeQueue(Q, u); //出队 for ( w=FirstAdjVex(G, u); w!=0; w=NextAdjVex(G, u, w) ) if ( ! visited[w]) { visited[u] = TRUE; Visit(u); //访问 EnQueue(Q, w); //入队 } } //while } //if } // BFSTraverse // FirstAdjVex(G, u)寻找u的第一个邻接点,并返回其下标位置 // NextAdjVex(G, u, w) w是u的一个邻接点,寻找u的所有邻接点中位于w后面的那一个,并返回其下标位置
评论
4 楼
sblig
2012-05-22
用Dijkstra算法求最短路径
#define MAX_VERTEX_NUM 20 void ShortestPath_DIJ(MGraph G,int v1) //V1是源点 { //用Dijkstra算法求有向网G的v10顶点到其余顶点的最短路径 int P[ MAX_VERTEX_NUM] , D[ MAX_VERTEX_NUM]; int final[ MAX_VERTEX_NUM]; int i,v,w,min,pre; for(v=1; v<=G.vexnum; ++v) { //D[ ],final[ ],P[ ]初始化 final[v]=FALSE; D[v]=G.arcs[v1][v].adj; if(D[v]<INFINITY) P[v]=1; else P[v]=0; } D[v1]=0; final[v1]=TRUE; //源点v0相关数组初始化 for( i=2; i<=G.vexnum; ++i) { min=INFINITY; //寻找final[]=0的D[ ]中最小值 for(w=1; w<=G.vexnum; ++w) //最小值->min,最小值的下标->v if(!final[w] &&D [w]<min) { v=w; min=D[w];} final[v]=TRUE; //入选 for(w=1; w<=G.vexnum; ++w) //根据入选的v顶点修改D[ ]及p[ ] if(!final[w] && (min+G.arcs[v][w].adj<D[w])) { D[w]=min+G.arcs[v][w].adj; P[w]=v; } } //逐渐更新D[ ] 及p[ ] for (w=1; w<=G.vexnum; ++w) //依次输出 { printf("%d",w); pre=P[w]; if ( pre==0) if(w==v1) printf(" source point \n"); else printf(" No Path \n"); else { while( pre!=v1 ) { printf("<--%d",pre); pre=P[pre];} printf("<--%d **** distance is:%d\n",v0,D[w]); } //else } //for 输出结束 } ShortestPath_DIJ void ShortestPath_FLOYD(MGraph G,PathMatrix &p[],DistancMatrix D[]) { for(v=0;v<G.vexnum;v++) for(w=0;w<G.vexnum;w++) { D[v][w] = G.arcs[v][w]; for(u=0;u<G.vexnum;u++) P[v][w][u]=FALSE; if(D[v][w] < INFINITY) { P[v][w][v] = TRUE; P[v][w][w] = TRUE; } } for(v=0;v<G.vexnum;v++) for(w=0;w<G.vexnum;w++) for(u=0;u<G.vexnum;u++) if(D[v][u] + D[u][w] < D[v][w]) { D[v][w] = D[v][u]+D[u][w]; for(i=0; i<G.vexnum; i++) P[v][w][i]= P[v][u][i] || P[u][w][i]; } }
3 楼
sblig
2012-05-22
0 1 2 3 4 5
0 * 6 1 5 * *
1 6 * 5 * 3 *
2 1 5 * 5 6 4
3 5 * 5 * * 2
4 * 3 6 * * 6
5 * * 4 2 6 *
U 1
到达顶点 V1 V2 V3 V4 V5 V6
经由U中 V1 V1 V1 V1 V1 V1
耗费 0 6 1 5 * *
入选顶点 V3
U 13
到达顶点 V1 V2 V3 V4 V5 V6
经由U中 V1 V3 V1 V1 V3 V3
耗费 0 5 0 5 6 4
入选顶点 V6
U 136
到达顶点 V1 V2 V3 V4 V5 V6
经由U中 V1 V3 V1 V6 V3 V3
耗费 0 5 0 2 6 0
入选顶点 V4
U 1364
到达顶点 V1 V2 V3 V4 V5 V6
经由U中 V1 V3 V1 V6 V3 V3
耗费 0 5 0 0 6 0
入选顶点 V2
U 13642
到达顶点 V1 V2 V3 V4 V5 V6
经由U中 V1 V3 V1 V6 V2 V3
耗费 0 0 0 0 3 0
入选顶点 V5
U 136425
到达顶点 V1 V2 V3 V4 V5 V6
完成 经由U中 V1 V3 V1 V6 V2 V3
耗费 0 0 0 0 0 0
入选顶点
0 * 6 1 5 * *
1 6 * 5 * 3 *
2 1 5 * 5 6 4
3 5 * 5 * * 2
4 * 3 6 * * 6
5 * * 4 2 6 *
U 1
到达顶点 V1 V2 V3 V4 V5 V6
经由U中 V1 V1 V1 V1 V1 V1
耗费 0 6 1 5 * *
入选顶点 V3
U 13
到达顶点 V1 V2 V3 V4 V5 V6
经由U中 V1 V3 V1 V1 V3 V3
耗费 0 5 0 5 6 4
入选顶点 V6
U 136
到达顶点 V1 V2 V3 V4 V5 V6
经由U中 V1 V3 V1 V6 V3 V3
耗费 0 5 0 2 6 0
入选顶点 V4
U 1364
到达顶点 V1 V2 V3 V4 V5 V6
经由U中 V1 V3 V1 V6 V3 V3
耗费 0 5 0 0 6 0
入选顶点 V2
U 13642
到达顶点 V1 V2 V3 V4 V5 V6
经由U中 V1 V3 V1 V6 V2 V3
耗费 0 0 0 0 3 0
入选顶点 V5
U 136425
到达顶点 V1 V2 V3 V4 V5 V6
完成 经由U中 V1 V3 V1 V6 V2 V3
耗费 0 0 0 0 0 0
入选顶点
2 楼
sblig
2012-05-22
/****************最小生成树Prim算法******************/ typedef struct { VertexType adjvex; VRType lowcost; } closedge[MAX_VERTEX_NUM]; void MiniSpanTree_PRIM (MGraph G, VerTexType u) { k = LocateVex ( G, u ); // 顶点u为构造生成树的起始点 for ( j=0; j<G.vexnum; ++j ) // 辅助数组初始化 if (j!=k) closedge[j] = { u, G.arcs[k][j].adj }; closedge[k].lowcost = 0; // 初始,U={u} for (i=1; i<G.vexnum; ++i) { //在其余顶点中选择 k = minimum(closedge); // 求出T的下一个结点(k) printf(closedge[k].adjvex, G.vexs[k]); // 输出生成树的边 closedge[k].lowcost = 0; // 第k顶点并入U集 for (j=0; j<G.vexnum; ++j) if (G.arcs[k][j].adj < closedge[j].lowcost) { closedge[j].adjvex=G.vexs[k]; closedge[j].lowcost=G.arcs[k][j].adj; }; } } // MiniSpanTree_PRIM
1 楼
sblig
2012-05-22
/********************深度优先遍历算法*******************/ //--- 下列算法使用两个的全局变量 --- Boolean visited[MAX]; // 访问标志数组 Status (* VisitFunc)(int v); // 函数变量 void DFSTraverse(Graph G, Status (*Visit)(int v)) { // 对图G作深度优先遍历。 VisitFunc = Visit; for (v=0; v<G.vexnum; ++v) visited[v] = FALSE; // 访问标志数组初始化 for (v=0; v<G.vexnum; ++v) if (!visited[v]) DFS(G, v); // 对尚未访问的顶点调用DFS } void DFS (Graph G, int v) { // 从顶点v出发递归地深度优先遍历图G。 visited[v] = TRUE; VisitFunc(v); //访问第v个顶点 for (w=FirstAdjVex(G, v); w!=0; w=NextAdjVex(G, v, w) ) if (!visited[w]) DFS(G, w); // 对v的尚未访问的邻接顶点w递归调用DFS } // FirstAdjVex(G, u)寻找u的第一个邻接点,并返回其下标位置 // NextAdjVex(G, u, w) w是u的一个邻接点,寻找u的所有邻接点中位于w后面的那一个,并返回其下标位置
发表评论
-
OpenGL 图形编程 学习笔记 三
2013-01-04 13:54 1843[2012-12-31 16:53] openGL笔记 ... -
OpenGL 图形编程 学习笔记 二
2013-01-04 13:48 1226[2012-12-31 16:38] OpenGL ... -
OpenGL 图形编程 学习笔记 一
2013-01-04 13:45 1131[2012-12-31 16:15] OpenGL学习笔 ... -
Boost 学习笔记 第一天
2012-12-07 10:50 10161. timer.hpp timer接口简单,轻 ... -
“工业级” 断言
2012-09-06 12:30 991class Assert { public: A ... -
算法学习 之链表
2012-05-22 13:52 1004/**********开放定址哈希表的存储结构***** ... -
算法学习 之查询
2012-05-22 11:45 900/******************顺序查找***** ... -
算法学习 之排序
2012-05-07 11:42 928/***********直接插入排序********** ... -
日常开发有用标签 五
2012-04-11 10:42 902linux cmd Mr__zh ... -
日常开发有用标签 四
2012-04-11 10:38 778java I/O 深入分析 Java ... -
日常开发有用标签 三
2012-04-11 10:37 911java thread java并发编程- ... -
日常开发有用标签 二
2012-04-11 10:35 693java 100个Java经典例子(41- ... -
日常开发有用标签 一
2012-04-11 10:31 930工具 Linux 常用C函数(中文版) ... -
C++ Primer 笔记七
2012-03-27 16:15 894每个类都定义了一个接口和一个实现。接口由使用该类的代码需要执行 ... -
C++ Primer 笔记六
2012-03-07 14:38 842typedef 通常被用于以下三种目的: 1.为了隐藏特定类型 ... -
C++ Primer 笔记五 引用(const)1
2012-02-24 17:50 1261定义 const 对象常量在定义后就不能被修改,所以定义时必须 ... -
C++ Primer 笔记四
2012-02-22 15:38 10331.内置类型变量是否自动初始化取决于变量定义的位置。在函数体外 ... -
C++ Primer 笔记三
2012-02-22 12:53 868初始化变量定义指定了变量的类型和标识符,也可以为对象提供初始值 ... -
C++ Primer 笔记二
2012-02-16 16:09 932/* * main.cpp * Created on ... -
C++ Primer 笔记一
2012-02-16 16:08 920/* * main.cpp * Created on ...
相关推荐
遍历算法是计算机科学中处理树形数据结构时的关键操作,它涉及到按照特定顺序访问树中的每一个节点。在二叉树的遍历中,通常有三种主要的遍历方法:前序遍历、中序遍历和后序遍历。这些遍历方式都是基于二叉树的递归...
在IT领域,尤其是在数据结构与算法的学习中,中序遍历二叉树的非递归算法是一个关键且实用的知识点。通常,我们首先通过递归来实现二叉树的遍历,但递归方法可能因深度过大导致栈溢出,因此掌握非递归版本的遍历算法...
在本文中,我们将深入探讨如何建立P131算法6.4,并介绍遍历二叉树的方法。首先,P131算法6.4没有提供具体的细节,但从代码来...理解这些概念和方法对于理解和操作二叉树至关重要,也是数据结构和算法学习中的基础内容。
本资源提供了树的非递归遍历算法的C语言源码,包括层次遍历(BFS,Breadth-First Search)和深度遍历(DFS,Depth-First Search)。下面我们将详细探讨这两种遍历方法及其非递归实现。 **层次遍历(BFS)**: 层次...
### 汉诺塔问题算法和二叉树遍历的关系 #### 一、汉诺塔问题及算法介绍 汉诺塔问题是一个经典的递归问题,它由三个柱子(通常称为A、B、C)和若干个不同大小的圆盘组成。游戏的目标是从一个柱子(比如A)将所有...
"先序遍历的非递归算法" 本文将详细介绍二叉树的先序遍历非递归算法,包括其原理、实现代码和相关知识点。 知识点1:二叉树的概念 ...通过学习本文,读者可以更好地理解树遍历算法和非递归算法的原理和实现。
总的来说,掌握图的遍历算法是每个IT从业者必备的技能之一,无论是数据分析、软件开发还是算法设计,都有可能用到这些基础知识。不断练习和深化理解,将使你在处理与图相关的问题时更加得心应手。
数据结构与算法图的遍历与连通性PPT学习教案 本资源摘要信息是关于数据结构与算法图的遍历与连通性PPT学习教案,总共43页,涵盖了图的遍历、深度优先搜索(DFS)和广度优先搜索(BFS)等关键概念。 图的遍历是指从...
实验的目的在于让学习者掌握二叉树的逻辑结构和不同遍历方式,以及如何使用指针类实现这些操作。通过这个实验,学生可以理解二叉树的基本操作,并加深对二叉链表存储结构的理解。同时,通过编写和调试代码,提高编程...
在IT领域,数据结构是计算机科学中的核心概念之一,它涉及到如何有效地组织和存储数据,以便于高效地访问和操作。在这个压缩包中,我们关注的是三个主要知识点:哈弗曼编码(Huffman Coding)、二叉树遍历以及矩阵...
总结,二叉树及其遍历是数据结构和算法的基础,理解并掌握它们是成为一名优秀程序员的关键。二叉搜索树则在实际应用中展现出高效性,特别是在需要快速查找和排序的场景。通过学习和实践这些概念,我们可以更好地应对...
上机作业4可能涵盖了设计和实现这三种遍历算法,通过编写程序来演示和验证遍历的结果。在实际操作中,可以使用伪代码、Python、Java或其他编程语言来实现。同时,理解每种遍历方法的逻辑并能够可视化遍历过程,对于...
基于c的二叉树遍历算法课程设计实验项目+入门级学习+源码和遍历算法介绍 项目简介 二叉树遍历算法实现是一个经典的数据结构课程实验项目。该项目旨在通过编程实践,让学生掌握二叉树的前序遍历、中序遍历和后序遍历...
数据结构与算法学习:图的遍历以及邻接表
理解并熟练掌握这两种遍历方法是数据结构和算法学习的重要部分,它们能帮助我们有效地解决复杂的问题,并为高级算法提供基础。 总之,图的遍历是数据结构中的核心内容,C++的实现方式既体现了编程技巧,又展示了对...
图的遍历是数据结构中的一个重要概念,主要探讨如何系统地访问图中的所有顶点,确保每个顶点至少被访问一次。...无论是对数据结构的学习者还是对算法设计感兴趣的开发者而言,这篇文章都是不可多得的参考资料。
通过递归算法实现这三种遍历方式,有助于深入理解二叉树的性质和操作,为后续的算法学习和问题解决打下坚实基础。在编程实践中,我们可以根据具体需求选择合适的遍历策略,以高效地处理二叉树结构的数据。
在本压缩包中,我们包含了三个C语言编程实验,涵盖了数据结构中的重要概念:一元多项式相加、串模式匹配算法以及二叉树遍历与路径查找。这些实验不仅有助于深入理解C语言的编程技巧,同时对于掌握数据结构的核心原理...
根据给定文件的信息,本文将详细介绍二叉树的前序、中序、后序以及层序遍历的递归算法,并结合代码实例进行说明。 ### 一、二叉树的基本...这些遍历方式是理解和操作二叉树的基础,对于学习数据结构和算法至关重要。
我们就是不断的掌握着最古老的排序:冒泡等,可是就是在实践的时候往往就是一点用武之地都是没有的,于是我们做的一个小小的东东,就是一个简易的遍历的算法的实现,我们就是在不断的学习的过程里面体味我们的乐趣的...