博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
有向图是否有环(邻接表) 拓扑排序 法
阅读量:4217 次
发布时间:2019-05-26

本文共 1231 字,大约阅读时间需要 4 分钟。

建图 与前面类似(邻接表)

图相关结构:

#define MAXVEX 100typedef char VertexType;typedef struct QNode {	int front, rear;	int data[MAXVEX];	int size;}Queue;typedef struct ENode {	int ivex;//顶点 索引	struct ENode* next;}ENode;typedef struct VNode {	VertexType data; // 顶点 信息	ENode* first_edge;}VNode;typedef struct Graph {	VNode vex[MAXVEX];	int vex_num, edge_num;}Graph;
核心代码:
int has_circle(Graph g){	Queue q;	init_queue(&q);	int i, j, index;	index = 0;	int* ins;//记录 各顶点入度	char* topos;//记录排序结果	int num;	num = g.vex_num;	ENode* node;	ins = (int*)malloc(sizeof(int)*num);	topos = (char*)malloc(sizeof(char)*num);	memset(ins, 0, sizeof(int)*num);	memset(topos, 0, sizeof(char));	for (i = 0; i < g.vex_num; i++) {//算入度 过程		node = g.vex[i].first_edge;		while (node != NULL) {			ins[node->ivex]++;			node = node->next;		}	}	for (i = 0; i < g.vex_num; i++) {		if (ins[i] == 0)  //把所有入度为0的顶点入队		{			enqueue(i, &q);		}	}	while (!is_empty(q)) {		j = q_front(q);		topos[index++] = g.vex[j].data;//出队 记录进排序结果里		dequeue(&q);		node = g.vex[j].first_edge;		while (node != NULL) {			ins[node->ivex]--;			if (ins[node->ivex] == 0) {				enqueue(node->ivex, &q);			}			node = node->next;		}	}	if (index != g.vex_num)//索引 记录 入队顶点数目  如果无环 则应该相等		return 1;	else		return 0;}

转载地址:http://uximi.baihongyu.com/

你可能感兴趣的文章
内存管理API之ksize
查看>>
内存管理API之alloc_pages
查看>>
linux performance tool
查看>>
test-definitions/blob/master/auto-test/bazel/bazel.sh
查看>>
test-definitions/blob/master/auto-test/bigdata/bigdata.sh
查看>>
/test-definitions/blob/master/auto-test/blktrace/blktrace.sh
查看>>
test-definitions/blob/master/auto-test/blogbench/blogbench.sh
查看>>
test-definitions/blob/master/auto-test/boost/boost.sh
查看>>
Java多态性理解
查看>>
Intellij Idea 工具在java文件中怎么避免 import .*包,以及import包顺序的问题
查看>>
IDEA Properties中文unicode转码问题
查看>>
Oracle中Blob转换成Clob
查看>>
Linux如何查看so中函数名
查看>>
自动管理代码的android.mk
查看>>
cocos2dx 2.2.6编译记录(1)
查看>>
makefile学习网站
查看>>
C 编写lua模块(1)
查看>>
Lua教程:Lua调用C/C++函数(4)
查看>>
win下创建win32控制台工程,执行lua脚本
查看>>
cocos2dx android启动错误
查看>>