首页 > 其他分享 >拓扑

拓扑

时间:2023-06-16 21:32:29浏览次数:32  
标签:adjlist EdgeNode int 拓扑 ++ adjvex printf

#include <stdio.h>
#include <malloc.h>
#define N 20

//图的邻接表-边或弧存储
typedef struct EdgeNode {
	int adjvex;
	struct EdgeNode *next;
} EdgeNode;

//图的邻接表-顶点存储(增加了入度域)
typedef struct VNode {
	char data;
	int ind;  //顶点入度
	struct EdgeNode *link;
} VNode;

//图的邻接表表示
typedef struct ALgraph {
	int vexnum, arcnum;
	VNode *adjlist[N];
} ALGraph;

void createGraph_list(ALGraph *g);
int topSort(ALGraph *g);

//读入数据创建带入度的邻接表
void createGraph_list(ALGraph *g) {
	char v;
	int i = 0, j;
	EdgeNode *add, *temp;
	v = getchar();
	while (v != '#') {
		g->adjlist[i] = (VNode *)malloc(sizeof(VNode));
		g->adjlist[i] ->data = v;
		g->adjlist[i]->link = NULL;
		g->adjlist[i]->ind = 0;
		i++;
		v = getchar();
	}
	getchar();
	g->vexnum = i;
	g->arcnum = 0;
	scanf("%d,%d", &i, &j);
	while (i != -1 && j != -1) {
		add = (EdgeNode *)malloc(sizeof(EdgeNode));
		add->adjvex = j;
		add->next = g->adjlist[i]->link; // 将边节点添加到链表头部
		g->adjlist[i]->link = add;
		g->adjlist[j]->ind++;
		g->arcnum++;
		scanf("%d,%d", &i, &j);
	}




}

//拓扑排序,判断图中是否存在环,存在返回0
int topSort(ALGraph *g) {
	int Stack[N];
	int top = -1;
	int visit[N] = { 0 };
	int count = 0;
	EdgeNode *p;
	for (int i = 0; i < g->vexnum; i++) {
		if (g->adjlist[i]->ind == 0) {
			Stack[++top] = i;
			visit[i] = 1;
		}
	}
	while (top != -1) {
		int oldvex = Stack[top--];
		count++;
		for (p = g->adjlist[oldvex]->link; p; p = p->next) {
			if (--g->adjlist[p->adjvex]->ind == 0) {
				if (!visit[p->adjvex]) {
					Stack[++top] = p->adjvex;
					visit[p->adjvex] = 1;
				}
			}
		}
	}
	if (count == g->vexnum) {
		return 1;
	} else {
		return 0;
	}
}


int main() {
	ALGraph g;
	int i;
	EdgeNode *s;
	createGraph_list(&g);
	for (i = 0; i < g.vexnum; i++) {
		printf("%c,%d:", g.adjlist[i]->data, g.adjlist[i]->ind);
		s = g.adjlist[i]->link;
		while (s != NULL) {
			printf("->%d", s->adjvex);
			s = s->next;
		}
		printf("\n");
	}
	i = topSort(&g);
	if (i == 1) {
		printf("%d\n", g.vexnum);
		printf("no ring\n");
	} else {
		printf("%d\n", i);
		printf("has ring\n");
	}
	return 0;
}





标签:adjlist,EdgeNode,int,拓扑,++,adjvex,printf
From: https://blog.51cto.com/u_16030624/6502889

相关文章

  • 拓扑排序
    先发个颠最近各种不好的事接踵而至,导致情绪波动很大,什么事情都专心不了,导致学业和算法上的学习都荒废了将近一周(要考试周了),还差点和班上同学吵架(已经和好了)。在休整了一段时间后,我幡然醒悟,因此,从这篇blog开始,我要重新拾起学业以及算法学习了(写完这篇就去复习大物,后天考。明天......
  • 考前复习——拓扑排序
    拓扑排序要解决的问题是给一个图的所有节点排序在一个DAG(有向无环图)中,我们将图中的顶点以线性方式进行排序,使得对于任何的顶点u到v的有向边(u,v),都可以有u在v的前面。注:有环的图无法给出拓扑排序因此也可以用这个性质判断图有无环intn,m;intin[N],out[N];/......
  • 拓扑排序
    定义拓扑排序(Topologicalsorting)要解决的问题是给一个有向图的所有节点排序。这里直接使用OI-Wiki中举的例子来说明:我们可以拿大学选课的例子来描述这个过程,比如学习大学课程中有:单变量微积分,线性代数,离散数学概述,概率论与统计学概述,语言基础,算法导论,机器学习。当我们想要学习......
  • 1.7Mininet多数据中心网络拓扑流量带宽实验
    Mininet多数据中心网络拓扑流量带宽实验实验目的1、掌握多数据中心网络拓扑的构建。2、熟悉网络性能测试工具Iperf,根据实验测试SDN网络的性能。实验环境Mininet多数据中心网络拓扑流量带宽实验的拓扑如下图所示。设备名称软件环境硬件环境主机Ubuntu14.04桌面......
  • 1.4基于RESTCONF的拓扑查询
    基于RESTCONF的拓扑查询任务目的1、学习了解SDN控制器REST北向接口的作用。2、熟悉OpenDaylight有关网络拓扑的REST常用接口。任务环境设备名称软件环境(镜像)硬件环境控制器Ubuntu14.04桌面版OpenDaylightLithiumCPU:2核内存:4G磁盘:20G交换机Ubuntu14.04......
  • 拓扑错误:自交。jts.geom.TopologyException: found non-noded intersection between L
    Thatbeingsaid,youwillwanttoensurethegeometriesarevalidbeforecomputingtheintersection,using polygon1.isValid() and polygon2.isValid().Thesampledatafor polygon2 isself-intersecting,sotheintersectionoperationfailswithcom.vividso......
  • Mininet拓扑构建与命令使用
    实验目的1、通过命令模拟创建SDN网络。2、深入了解Mininet的命令使用。3、学会使用网络构建启动参数、内部交互命令及外部运行参数。实验环境Mininet拓扑构建与命令使用实验拓扑如下图所示。设备名称软件环境硬件环境主机Mininet_2.2.0_desktop_cv1.1CPU:1核内......
  • 史上最全!全领域网络安全拓扑图(118页)
    大家好,我是老杨。前几天发了一篇OSPF的文章,助理发到群里和大家讨论。好几个小友表示,绘制拓扑的才是最高境界,并且想看些拓扑图案例。其实拓扑图案例老杨也分享过不少了。可以看看这些往期文章,《超干货!全国31所名校网络拓扑图全分析(高清版)》《精选50张网络监控拓扑图,一般人我还真不告......
  • MATLAB代码:全网唯一带拓扑MPEC,微网双层规划 关键词:
    MATLAB代码:全网唯一带拓扑MPEC,微网双层规划关键词:双层规划MPECVPPADNlindistflowKKT参考文档:《Bi-LevelProgrammingforOptimalOperationofanActiveDistributionNetworkWithMultipleVirtualPowerPlants》2020SCI一区IEEETransactionsonSustainableEnergy,......
  • 拓扑排序 - TopoSort
    拓扑排序-TopoSort前言wcy终于考上了心仪的大学,开启了精彩的大学生活!然而光是选课这一件事就把他难住了,因为一些课程包含先修课程:课程编号课程名称先修课程C1高等数学无C2程序设计基础无C3离散数学C1,C2C4数据结构C2,C3C5算法语言C2C6......