有向图的邻接表的建立,深度遍历并输出(c语言实现有向网)

2023-11-20

有向图的邻接表的建立,深度遍历并输出(c语言实现有向网)

  • [ ]为方便理解。 首先先为图的邻接表画一个模型,
  • 邻接表可以分为两部分(1.表头节点,2.弧节点)
  • 如上图,因为写的代码是有向网,所以选择上图,首先在脑海里建立一个模型
  • 代码如下
#include<stdio.h>
#include<stdlib.h>
int visited[20]; //顶点的访问标志 
 
//*邻接表用两部分表示  1顶点节点包含(data firstarc) 2弧节点包含(adjvex, *next weigh) 
typedef enum {DG/*有向图*/,DN/*有向网*/,UDG/*无向图*/,UDN/*无向网*/} GraphKind;

typedef struct ArcNode{
	int adjvex;//该弧指向顶点的位置 
  struct ArcNode *next;//指向下一条弧的指针 
	int  weigh;//弧的权值 
}ArcNode;


typedef struct vertexNode{ 
	int data;//顶点数据 
	 ArcNode * firstarc;//指向该顶点第一条弧的指针 
}vertexNode; 

typedef struct{
	vertexNode vertex[20];
	int vexnum;
	int arcnum;//图的顶点数量和弧的数量 
	//GraphKind kind;//图的种类 
} AdjList; 

int creat(AdjList *a)
{
	int i,j,n;
	int sum;//sum和arcnum一样代表图中总的弧数 
	ArcNode *p1,*p2,c;
	printf("请输入图顶点的总个数和弧的总个数\n");
	scanf("%d %d",&a->vexnum,&a->arcnum);
	sum=a->arcnum; 
	for(i=0;i<a->vexnum;i++)
    	a->vertex[i].firstarc=NULL;//初始化和顶点第一个相邻的弧为空; 
	for(i=0;i<a->vexnum;i++)
	{
	 	
	printf("***请输入第%d个顶点的值***\n",i);
	scanf("%d",&a->vertex[i].data);
	 if(sum==0) continue;
	printf("请输入和本顶点相关弧的个数\n");
	scanf("%d",&n); 
	 
	for(j=0;j<n;j++)
	{
		if(j==0)
		{

		  int q;
			p1=p2=( ArcNode*)malloc(sizeof(ArcNode));
			//p1=p2=&c;
			p1->next=p2->next=NULL;
			a->vertex[i].firstarc=p1;
			printf("请输入与第%d个顶点相邻的,第%d个相邻的弧顶点(位置) 以及弧的权值\n",i,j);
			scanf("%d %d",&p1->adjvex,&p1->weigh);
			//printf("%d %d",p1->adjvex,p2->weigh);	
			sum--;		 			 
		}
		else{
			p2=(ArcNode*)malloc(sizeof(ArcNode));
			p2->next=NULL;
			p1->next=p2;
			printf("请输入第%d个顶点 第%d个相邻的弧顶点 以及两个顶点间弧的权值\n",i,j);
			scanf("%d %d",&p2->adjvex,&p2->weigh);	
			sum--;		
		}
		
	}
	printf("**************************\n");
	
		
	}
}

void print( AdjList a)//输出矩阵 
{
    int i,j;
    for(i=0;i<a.vexnum;i++)
    {
    	ArcNode *p;
    	p=a.vertex[i].firstarc;
    	printf(" [%d]",a.vertex[i].data);
    	
        while(p)
        {
        	printf("----->");
        	printf("[%d %d]",p->adjvex,p->weigh);
        	p=p->next; 
        
		}
        
    	printf("\n");
	}
	
}
void traverseGraph( AdjList a){//深度优先遍历图 
     int i,j;
     for(i=0;i<a.vexnum;i++)
     visited[i]=0;//标志全部顶点为访问
	 for(i=0;i<a.vexnum;i++)
	 {
	 	if(!visited[i]) 
	 	DepthFirstSearch(a,i); 
	 } 
	
}

int  DepthFirstSearch(AdjList a,int i){
	ArcNode *p;
	printf(" %d",a.vertex[i].data);
	visited[i]=1;
	p=a.vertex[i].firstarc;
	while(p)
	{
		if(!visited[p->adjvex])
		DepthFirstSearch(a,p->adjvex); 
		p=p->next; 
	}
	
}
int main()
{   AdjList a;

      creat(&a);
      print(a);//邻接表形式输出图
      printf("***深度遍历图***\n");
	  traverseGraph(a); //深度优先遍历图

 } 

测试了下
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有向图的邻接表的建立,深度遍历并输出(c语言实现有向网) 的相关文章

  • c3p0数据库连接池死锁问题和mysql重连,连接丢失

    c3p0参数解释 最常用配置 initialPoolSize 连接池初始化时创建的连接数 default 3 取值应在minPoolSize与maxPoolSize之间 c3p0 initialPoolSize 10 minPoolSize
  • 敏捷项目管理ACP解析会笔记

    互联网时代企业环境现状 产品生命周期急剧缩短 市场环境变化太快 客户不满意 客户 团队 产品 产品需求界定不清 什么是敏捷项目管理 低成本 快速度 高质量 交付更高质量 敏捷宣言 个体和交互 重于过程和工具 可工作的软件 重于面面俱到的文档
  • Java高并发处理方案

    java高并发 如何解决 什么方式解决 一 什么是高并发 二 高并发解决思路 三 高并发解决方案 一 什么是高并发 1 1 高并发 High Concurrency 是互联网分布式系统架构设计中必须考虑的因素之一 它通常是指 通过设计保证系
  • 实现一个函数,判断一个数是不是素数

    include
  • Stream实现List和Map互转总结

    本文来说下Stream实现List和Map互转总结 文章目录 实体类 Map转List代码 List转Map代码 实体类 本篇介绍Stream流List和Map互转 同时在转换过程中遇到的问题分析 package cn wideth col
  • 找到专业的软件外包开发公司

    今天给大家分享怎么样找软件开发公司开发 而且找到的是既负责又专业的 那怎么去找呢 看哪些方面 北京木奇移动技术有限公司 专业的软件外包开发公司 欢迎交流合作 1 案例看实力 在选择软件定制开发公司时 必须要留意对方的案例如何 有否做过大型的
  • 理解HTTP headers之Expires、Cache-Control、IF-Modified-Since

    一 什么是Http headers 当你在浏览器地址栏里键入一个url 你的浏览器将会类似如下的http请求 GET tutorials other top 20 mysql best practices HTTP 1 1 Host net
  • Hive函数row_number实现

    需求 查询一批用户最后三次登陆时间 ip数据 理解需求是实现分组取前n个值 实现方式是先按照uid字段升序或倒序 时间字段倒序排序数据集合 然后遍历数据集合 用row number函数遍历uid字段 相同则row number值 1 取ro
  • el-table添加border边框线不显示

    el table添加border属性 使用作用域插槽 会不现实左边的边框线 或者右边的边框线 总结问题 1 固定了表格的高度 height 250 把高度去掉
  • JavaScript(函数,作用域和闭包)

    目录 一 什么是函数 1 1 常用系统函数 1 2 函数声明 1 3 函数表达式 二 预解析 2 1 函数自调用 2 2 回调函数 三 变量的作用域 3 1 隐式全局变量 四 作用域与块级作用域 五 作用域链 六 闭包 一 什么是函数 类似
  • 微信小程序:图片高度设置无效问题

    控制台查看元素 显示其style中多了一个没有设置的高度值 找了很久发现是因为image标签设置了mode widthFix 此时高度会自适应 样式中设置高度无效
  • 对接百度api的工具类:Base64Util,FileUtil,HttpUtil

    对接百度api的工具类 Base64Util FileUtil HttpUtil package com baidu ai aip utils Base64 工具类 public class Base64Util private stati

随机推荐

  • Windows中安装GCC教程

    GCC的安装教程 GCC简介 GCC编译器通常在Linux系统下使用 一般来说大部分发行的系统会默认安装 GCC编译器使用gcc指令在终端进行shell操作 对于新接触Linux的朋友来说 简单的在Windows中练习过渡一下应该就足够了
  • Python数据库接口以及API

    非常详细的解释 包含数据库分类以及各种数据库的特点 https wiki python org moin DatabaseInterfaces
  • flex布局详解

    声明 本人的所有博客皆为个人笔记 作为个人知识索引使用 因此在叙述上存在逻辑不通顺 跨度大等问题 希望理解 分享出来仅供大家学习翻阅 若有错误希望指出 感谢 flex基本概念 任何一个容器都可以指定为Flex布局 例如 box displa
  • 3min利用Python实现9种经典排序算法可视化!(附源代码)

    来源 恋习Python 本文附视频 建议收藏 本文为你分享实现9种经典排序算法可视化的方法 3分钟即可实现 导 读 近在某网站上看到一个视频 是关于排序算法的可视化的 看着挺有意思的 也特别喜感 不知道作者是怎么做的 但是突然很想自己实现一
  • Qt中使用QFrame,并使得边框周围添加阴影的效果

    参考大神博客 https blog csdn net wzz953200463 article details 100533435 1 使用Qframe实现阴影的效果 首先我们需要放置一个frame控件在界面上 2 需要加上头文件 incl
  • 代码文档生成工具:Doxygen

    1 什么是 Doxygen Doxygen是一个程序的文档生成工具 可以将程序中的注释转换成说明文档或者说是API参考手册 同时也支持Markdown等文本工具 从而减少程序员整理文档的时间 程序中的注释需要遵循一定的规则书写 才能让Dox
  • SQL触发器编写与查看

    1 已有数据查看 2 编写触发器 以更新表一为条件 go create trigger TG Insert 创建触发器 on DB TABLE 20210528 定位某张表 for UPDATE 表 DB TABLE 20210528 更新
  • 微信小程序常见面试题

    1 小程序有几个文件 WXML 是框架设计的一套标签语言 结合基础组件 事件系统 可以构建出页面的结构 WXSS 用于描述 WXML 的组件样式 js 逻辑处理 json 小程序页面配置 2 微信小程序与 H5 的区别 运行环境 小程序的运
  • 【ChatGPT进阶】如何使用ChatGPT写小说?

    ChatGPT文本处理能力是毋庸置疑的 可以使用上下文相关的文本来进行自动推理和生成 它可以用来帮助写以更快的速度完成文章 它可以参考上下文 以提供有用的洞察力和见解 它可以大大提高写文章的效率 它可以从上下文中提取关键信息 然后使用这些信
  • WTL 界面设计篇(CSkinEdit)

    头文件声明 CSkinEdit h pragma once include SkinManager h 不支持滚动条皮肤 图片背景支持不完整 Edit控件必须是ES MULTILINE风格 SetMarginsEx才能生效 ES MULTI
  • 【Linux】使用systemd设置开机自启动命令

    目录 1 使用使用systemd实现开机自动运行命令 1 1 新建一个 service文件 1 2 编写 service文件 1 2 1 Unit 1 2 2 Service 1 2 3 Install 1 3 启动服务并设置自启动 2 编
  • Windows运行常用命令(win+R)

    1 calc 启动计算器 2 notepad 打开记事本 3 write 写字板 4 mspaint 画图板 5 snippingtool 截图工具 支持无规则截图 6 mplayer2 简易widnows media player 7 S
  • mybatis中type-aliases-package的用法

    springboot项目中的application yml文件中的mybatis type aliases package 什么时候用 mapper xml文件中resultMap的type parameterType resultType
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • 1分钟快速掌握Vue Router的使用?

    简介 Vue Router 是 Vue js 官方的路由管理器 它和 Vue js 的核心深度集成 让构建单页面应用变得易如反掌 包含的功能有 嵌套的路由 视图表 模块化的 基于组件的路由配置 路由参数 查询 通配符 基于 Vue js 过
  • AI工程化:各家的AI平台、AI中台架构图

    中台的概念 AI 中台是用来构建大规模智能服务的基础设施 是一套完整的人工智能模型全生命周期管理平台和服务体系 提供模型设计训练 模型 算法库 复用标注管理 模型监控服务等能力支持 AI中台旨在让企业业务前台可以短兵作战 小步快跑 降低试错
  • Unity 粒子特效、材质发光 HDR ShaderGraph图文教程[完成lit发光设置]

    效果如图 准备工作 在hdr模式下 关闭Directional Light 相机设置 移动球挂一个点光源作为子节点 设置自行调节 0 创建移动球的材质及shader shader gt 在Project Create Shader Grap
  • 查找出某表字段数据不为空

    DECLARE CURSOR temp IS SELECT COLUMN NAME FROM ALL TAB COLUMNS WHERE TABLE NAME Upper TEST v num NUMBER BEGIN FOR i IN t
  • 如何在 Vultr 上部署 ONLYOFFICE 文档 v7.3

    现在您可使用通过 Vultr 市场提供的一键式应用在 Vultr 架构中轻松部署 Docker 版本的 ONLYOFFICE 文档 一键式应用是什么 一键式应用是一个包含所有必要预配置组件的镜像 可用于便捷地在运行有 Ubuntu OS 的
  • 有向图的邻接表的建立,深度遍历并输出(c语言实现有向网)

    有向图的邻接表的建立 深度遍历并输出 c语言实现有向网 为方便理解 首先先为图的邻接表画一个模型 邻接表可以分为两部分 1 表头节点 2 弧节点 如上图 因为写的代码是有向网 所以选择上图 首先在脑海里建立一个模型 代码如下 include