当前位置: 首页 > news >正文

邻接表的有向网(C语言代码)

#include <stdio.h>
#include <stdlib.h>
#define MVNum 100       //最大顶点数
//边表结构体
typedef struct ArcNode {                		//表结点 int adjvex;                                    //邻接点的位置 struct ArcNode* nextarc;      //指向下一个表结点的指针 int info;//权值
}ArcNode;
//顶点结构体,其中 ArcNode* firstarc是指向边表结构体的指针
typedef struct VNode {char data;                    	            //顶点信息 ArcNode* firstarc;         //指向第一个表结点的指针 
}VNode, AdjList[MVNum];                 //AdjList表示邻接表类型 
//初始化顶点数,边数,以及指向顶点结构体
typedef struct {AdjList vertices;              //头结点数组int vexnum, arcnum;     //图的当前顶点数和边数 
}ALGraph;void CreatMGraph(ALGraph* G);		/* 创建图 */
void printGraph(ALGraph G);			/*输出图 */int main()
{ALGraph G;CreatMGraph(&G);printGraph(G);return 0;
}
void CreatMGraph(ALGraph* G)
{int i, j, k,w;ArcNode* s;printf("请输入顶点总数+边数\n");scanf("%d%d", &G->vexnum, &G->arcnum); 	//输入总顶点数,总边数 getchar();//吸收scanf残留的换行符printf("请输入顶点数的顶点有哪些\n");for (i = 0; i < G->vexnum; i++) {   			                         //输入各点,构造表头节点表 scanf("%c", &G->vertices[i].data);  //输入顶点值 }for (i = 0; i < G->vexnum; i++) {G->vertices[i].firstarc = NULL;   	//初始化表头节点的指针域为NULL }for (k = 0; k < G->arcnum; k++) {   printf("请输入边数(vi,vj)以及权值 info,一共有%d条边数\n", G->arcnum);  //输入各边,构造邻接表  scanf("%d%d%d ", &i, &j, &w);    			     //输入一条边的两个节点 s = (ArcNode*)malloc(sizeof(ArcNode));   // 生成一个新节点 s->adjvex = j;s->info = w;s->nextarc = G->vertices[i].firstarc;  //头插法建立新节点 G->vertices[i].firstarc = s;}
}
void printGraph(ALGraph G)
{int i, j;ArcNode* p;for (i = 0; i < G.vexnum; i++) {printf("%c:", G.vertices[i].data);//打印顶点for (p = G.vertices[i].firstarc; p; p = p->nextarc)//打印顶点对应的边表结点{printf(" %d", p->info);}printf("\n");}
}

 终端输入内容:

请输入顶点总数+边数
6 10
请输入顶点数的顶点有哪些
012345
请输入边数(vi,vj)以及权值 info,一共有10条边数
0 1 5
请输入边数(vi,vj)以及权值 info,一共有10条边数
0 3 7
请输入边数(vi,vj)以及权值 info,一共有10条边数
1 2 4
请输入边数(vi,vj)以及权值 info,一共有10条边数
2 0 8
请输入边数(vi,vj)以及权值 info,一共有10条边数
2 5 9
请输入边数(vi,vj)以及权值 info,一共有10条边数
3 2 5
请输入边数(vi,vj)以及权值 info,一共有10条边数
3 5 6
请输入边数(vi,vj)以及权值 info,一共有10条边数
4 3 5
请输入边数(vi,vj)以及权值 info,一共有10条边数
5 4 1
请输入边数(vi,vj)以及权值 info,一共有10条边数
5 0 3
0: 7 5
1: 4
2: 9 8
3: 6 5
4: 5
5: 3 1

 

http://www.lryc.cn/news/460394.html

相关文章:

  • 大模型生成PPT大纲优化方案:基于 nVidia NIM 平台的递归结构化生成
  • MRSO算法(JCR2区)
  • 最新Spring Boot3框架入门教程,基础知识讲解(参考官方文档),同时基于MybatisPlus+MYSQL搭建后台管理系统基础流程(附源码)
  • 导数的概念及在模型算法中的应用
  • 获取首日涨停封盘后第二次交易日上涨/下跌的概率
  • shell $ 用法
  • 如何用支付宝实现靠脸吃饭
  • Visual Studio的实用调试技巧总结
  • graphrag学习总结
  • 专题:贪心算法(已完结)
  • Hadoop的三种运行模式:单机模式、伪分布式模式和完全分布式模式
  • JavaScript将array数据下载到Excel中
  • 【前端】Bootstrap:快速开始
  • 文献阅读(222) VVQ协议死锁
  • Node.js管理工具NVM
  • 云原生后端
  • 充电宝哪个品牌值得买?2024年五款靠谱充电宝推荐
  • YOLOv11对比YOLOV8网络结构变化分析,帮助你真正的理解和学习yolo框架
  • 弃用RestTemplate,RestClient真香!
  • electron-vite_10electron-updater软件更新
  • React native之全局变量存储AsyncStorage
  • 获取vue实例
  • 基于Python实现电影推荐系统
  • 【linux】进程理解
  • 文件IO练习1
  • c++ std::future 和 std::promise 的实现工作原理简介
  • MATLAB(Octave)混电动力能耗评估
  • opencv学习:人脸识别器特征提取BPHFaceRecognizer_create算法的使用
  • HTML+CSS总结【量大管饱】
  • Android开发之Broadcast Receive(广播机制)其实开发如此简单