- 浏览: 736044 次
- 性别:
- 来自: 嘉兴
文章分类
- 全部博客 (386)
- Struts1.1 (2)
- Database (18)
- Core Java (15)
- Log4j (4)
- SSH (0)
- Dao (1)
- Architecture Design (1)
- References (2)
- Eclipse&MyEclipse (10)
- Hibernate (7)
- Spring (8)
- JavaMail (1)
- Data Structure And Algorithm (48)
- Struts 2 (2)
- SSI (1)
- SSL (2)
- JSTL (1)
- EJB3 (2)
- NET (2)
- XML (2)
- Components (2)
- Ant (3)
- Multi Thread (1)
- Performance Monitoring (1)
- Web Server (17)
- Oracle (1)
- jQuery (8)
- Regular Expression (1)
- Weblogic (1)
- Exception (1)
- Security (2)
- File Manipulation (1)
- JavaScript (12)
- JVM (2)
- HTML&DIV&CSS (4)
- Android (10)
- Beyond GFW (0)
- Business (0)
- SVN (6)
- 虚拟主机 (1)
- Virtual Host (3)
- My mentality (5)
- OS (15)
- ISPMP (3)
- Magento (5)
- Jsoup&HttpClient (7)
- LINUX (9)
- Database Design (0)
- Power Designer (1)
- TaobaoOpenPlatform (2)
- C/C++ (3)
- Maven (11)
- Quartz (1)
- Load Balance (1)
- Zabbix (4)
- Product&Business (1)
- Pay Interface (1)
- Tomcat (2)
- Redis (1)
- 集群 (1)
- Session (1)
- 共享Session (1)
- Jedis (1)
- jenkins (1)
- 持续集成 (1)
- Web前端 (1)
最新评论
-
aqq331325797:
特意注册账号上来说一句。牛逼!
swagger2.2.2 与 spring cloud feign冲突 -
KitGavinx:
跨顶级域名怎么保持sessionid一致?
Tomcat7集群共享Session 基于redis进行统一管理 -
jaychang:
dujianqiao 写道HI ,能否给一个完整的demo 啊 ...
淘宝订单同步方案 - 丢单终结者 -
GGGGeek:
找了一会儿,感觉mybatis应该没有这种操作,直到发现博主的 ...
mybatis collection list string -
dujianqiao:
HI ,能否给一个完整的demo 啊 ?
淘宝订单同步方案 - 丢单终结者
/********************************** title: 拓扑排序(邻接表实现) author: jay chang date: 2009/07/16 **********************************/ #include<iostream> #define MAXSIZE 99 #define TRUE 1 #define FALSE 0 using namespace std; typedef char VertexData; typedef int AdjType; typedef struct Stack //定义栈 { int data[MAXSIZE+1]; int top; }Stack; typedef struct ArcNode //定义弧结点 { AdjType adj; ArcNode *nextArc; }ArcNode; typedef struct VertexNode //定义顶点 { VertexData vertexData; ArcNode *firstArc; }VertexNode; typedef struct AdjMatrix //定义图 { VertexNode vertexNodes[MAXSIZE+1]; int verNum,arcNum; }AdjMatrix; //全局变量 int indegree[MAXSIZE+1]={0}; int LocateGraph(AdjMatrix *g, VertexData vertexData) { int iIndex; for(iIndex=1;iIndex<=g->verNum;iIndex++) { if(vertexData==g->vertexNodes[iIndex].vertexData) return iIndex; } return FALSE; } void CreateGraph(AdjMatrix *g) { int iCount,arcStart,arcEnd;char start,end; cout<<"*****************************************"<<endl; cout<<"*** 拓扑排序\n"; cout<<"*** Author: Jay Chang\n"; cout<<"*****************************************"<<endl; cout<<"输入有向无环图的顶点,及弧数\n"; cin>>g->verNum>>g->arcNum; cout<<"输入有向无环图的顶点信息\n"; ArcNode *q=NULL; for(iCount=1;iCount<=g->verNum;iCount++) { cout<<"输入第"<<iCount<<"个顶点的信息"<<endl; cin>>g->vertexNodes[iCount].vertexData; g->vertexNodes[iCount].firstArc=NULL; } for(iCount=1;iCount<=g->arcNum;iCount++) { cout<<"输入第"<<iCount<<"条弧的起始与结束的信息"<<endl; cin>>start>>end; arcStart=LocateGraph(g,start); arcEnd =LocateGraph(g,end); //添加弧结点 q=(ArcNode*)malloc(sizeof(ArcNode)); q->adj=arcEnd; q->nextArc=g->vertexNodes[arcStart].firstArc; g->vertexNodes[arcStart].firstArc=q; //对于第arcEnd个顶点的入度值加1 indegree[arcEnd]++; } } //判栈空 int IsEmpty(Stack *stack) { return stack->top==-1?TRUE:FALSE; } //初始化栈 void InitStack(Stack *stack) { stack->top=-1; } //出栈 void Pop(Stack *stack,int *iIndex) { *iIndex=stack->data[stack->top--]; } //进栈 void Push(Stack *stack,int value) { stack->data[++stack->top]=value; } //拓扑排序 int Tuopu(AdjMatrix *g) { int iCount,count=0; Stack *stack=(Stack*)malloc(sizeof(Stack)); InitStack(stack); ArcNode *p=NULL; //对于入度为0的顶点入栈 for(iCount=1;iCount<=g->verNum;iCount++) { if(indegree[iCount]==0){ Push(stack,iCount); } } cout<<"输出拓扑序列\n"; //输出顶点后,将与该顶点相连的顶点的边删除,将与相连顶点的入度减1,如减后为0,入栈,栈空结束 while(!IsEmpty(stack)) { Pop(stack,&iCount); cout<<g->vertexNodes[iCount].vertexData<<" "; count++; p=g->vertexNodes[iCount].firstArc; while(p!=NULL) { if(--indegree[p->adj]==0) Push(stack,p->adj); p=p->nextArc; } }//end while if(count<g->verNum){ cout<<"有回路"<<endl; return FALSE; } cout<<endl; } int main() { AdjMatrix *g=(AdjMatrix*)malloc(sizeof(AdjMatrix)); CreateGraph(g); Tuopu(g); return 0; }
评论
2 楼
jaychang
2010-07-15
lixia0417 写道
不错,不过要是用java来描述就更好了
呵呵,有时间出个JAVA版的,敬请期待哈。。。
1 楼
lixia0417
2010-07-14
不错,不过要是用java来描述就更好了
发表评论
-
【排序算法系列】希尔排序
2015-12-05 16:14 842希尔排序的概述: a[0]...a[n-1 ... -
归并排序
2015-06-20 15:28 898public class MergeSort { pub ... -
插入排序
2015-06-20 15:27 486/** * 插入排序1 容易理解 * * ... -
有序线性链表归并
2013-10-05 11:30 1564#include<stdio.h> #incl ... -
Trie树 应用 Phone List
2012-06-15 11:21 1180Phone List 时间限 ... -
Trie树 单词查找树 键树(JAVA版附分析说明)
2012-06-13 10:27 5181来源于英文“retrieval”. ... -
Trie树 单词查找树 键树
2012-06-12 08:59 1157转自:http://zh.wik ... -
数字金额转中文大写金额
2010-11-26 15:09 1429/** * 用来将数字金额转化成中文大写的金额 ... -
汉诺塔递归算法
2010-11-25 08:17 1355import java.util.Scanner; /* ... -
约瑟夫出圈
2010-11-24 20:45 1101#include<iostream> #incl ... -
SmartHashSet只是为了解释HashSet的原理
2010-07-26 11:11 1363写该类的目的只是为了 ... -
二叉树中序遍历非递归算法
2010-06-29 23:17 1724#include<iostream> usi ... -
二叉树的创建
2010-06-29 23:15 1135#include<iostream> usi ... -
哈弗曼树建立与哈弗曼编码
2010-06-29 23:12 1250#include<iostream> #de ... -
二叉排序树转双向链表(要求无任何新增节点)
2010-06-29 23:07 2494题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双 ... -
线索二叉树中插入结点
2010-06-29 23:05 1895#include<iostream> usi ... -
二叉排序树的递归与非递归查找
2010-06-29 22:58 2310#include<iostream> usi ... -
二叉树中序线索化及查找某一结点的前驱,后继结点
2010-06-29 22:54 2686#include<iostream> usi ... -
十字链表定义创建查找
2010-06-29 22:44 1323#include<iostream> #defi ... -
稀疏矩阵转置
2010-06-29 22:39 1669#include<iostream> #defi ...
相关推荐
在这个"拓扑排序 邻接表实现.zip"文件中,我们很显然会深入探讨如何通过邻接表数据结构来实现拓扑排序算法。 首先,让我们理解什么是拓扑排序。在有向无环图中,拓扑排序是对图中所有顶点的一种线性排序,使得对于...
本篇将详细介绍如何使用逆邻接表来快速实现拓扑排序。 首先,我们需要理解什么是逆邻接表。在图的表示中,邻接表是一种常见的数据结构,它为每个顶点存储其相邻顶点的列表。对于有向图,正向邻接表记录了每条边的...
基于邻接表存储的图的拓扑排序算法,学习C++和理解数据结构很有帮助
在C语言下利用C语言创建AOE网,并进行拓扑排序。功能模块包含图的创建,图的输出及拓扑排序。
拓扑排序 有注释 邻接表形式的 求入度的
该报告将对拓扑排序问题进行深入分析,并设计实现基于紧缩图的邻接表的拓扑排序程序。 知识点1:紧缩图的邻接表 紧缩图的邻接表是一种高效的图存储方式,它将图的每个顶点的邻接表紧凑的存储在两个向量list和h中。...
在提供的源代码`AOV网的拓扑排序算法.c`中,你可以期待看到关于这些步骤的实现,包括数据结构的定义(如顶点和边)、邻接表的构建、入度计算、以及拓扑排序的函数。代码注释会帮助理解每一部分的功能。 输入示意图`...
该论文的主要内容包括:紧缩邻接表的数据结构、基于紧缩图的拓扑排序算法、STL 图库的应用、紧缩图的邻接表结构的设计和实现、拓扑排序的实现等。 在数据结构方面,本文主要介绍了紧缩邻接表的数据结构,包括向量 ...
为了实现拓扑排序,通常会使用到【邻接表】这种数据结构来表示图。邻接表是一种节省空间的图表示方法,它由一个顶点数组和一组链表组成,每个链表都包含了与其顶点相连的所有边的目标顶点。在C++中,可以定义如下: ...
请输入有向图的顶点数和弧数: 6 8 请输入各顶点的值(eg:字符型): ABCDEF 请输入各条弧的始点和终点: AB AC AD CB CE FD FE DE 该有向图的一个拓扑排序为: FACBDE
该课题的主要目标是设计基于紧缩图的邻接表的拓扑排序程序,采用STL的图、栈等数据结构,实现紧缩图的邻接表结构的拓扑排序。 知识点1:紧缩图的邻接表结构 紧缩图的邻接表结构是指将图的每个顶点的邻接表紧凑的...
本课程设计的目标是设计基于紧缩图的邻接表的拓扑排序程序,采用STL的图、栈等数据结构,实现STL的紧缩邻接表结构图类,并实现紧缩图的邻接表结构的拓扑排序。 在该课程设计中,我们首先对紧缩图的邻接表进行了深入...
在实际应用中,使用邻接表实现的图可以有效地进行深度优先搜索(DFS)和广度优先搜索(BFS),并支持多种图算法,如最短路径计算(Dijkstra算法或Floyd-Warshall算法)、拓扑排序等。此外,由于类模板的使用,此实现...
Kahn's算法或Tarjan's algorithm是实现拓扑排序的常见方法。 7. **连通性**:判断网络中所有顶点是否连通,可以使用深度优先搜索,若DFS能遍历所有顶点,则图是连通的;否则,它是不连通的。 8. **查找强连通分量*...
### AOV网与拓扑排序:深入理解与C语言实现 #### AOV网(Activity On Vertex Network) AOV网络,即活动在顶点上的网络,是一种有向无环图(Directed Acyclic Graph, DAG),主要用于表示项目管理中的任务依赖关系...
拓扑排序
本文将详细讲解如何使用C#语言实现有向图算法,包括邻接表、关键路径、深度优先搜索(DFS)和广度优先搜索(BFS),以及拓扑排序。 首先,我们要理解有向图的概念。有向图是由顶点(节点)和边组成的,边具有方向性...
拓扑排序是图论中的一个重要概念,主要应用于有向无环图(DAG,...在压缩包中的"拓扑排序(整体)"文件可能包含了关于拓扑排序的详细讲解、实例解析或代码实现,进一步深入学习将有助于深化对该概念的理解和应用。
通过上述C语言实现,我们可以对任何有向无环图进行拓扑排序。这个过程涉及到图的遍历、队列的操作以及邻接表的管理,是数据结构和算法学习中的经典问题。掌握这种方法不仅可以加深对图的理解,也有助于提升编程解决...