邻接表求有向图各顶点的入度和出度 (图论基础)
来源:互联网 发布:修改歌曲信息软件 编辑:程序博客网 时间:2024/05/21 21:45
有向图的邻接表用一个结构体LGraph存储表示,其中包括3个成员:顶点数组vertexs,顶点数vexnum和边数arcnum,其中顶点数组vertexs中每个元素都是VNode结构体变量。VNode结构体变量次年初图中每个顶点,它包含3个成员:顶点信息,出边表的表头指针和入边表的表头指针,其中后面两个成员都是ArcNode结构体类型的指针。ArcNode结构体存储边链表中的边节点,它包含两个成员:变的另一个邻接点的序号,以及指向下一个边节点的指针。
#define MAXN 100struct ArcNode //边节点;{ int adjvex; //有向边的另一个邻接点的序号; ArcNode *nextarc; //指向下一个边节点的指针;};struct VNode //顶点;{ int data; //顶点信息; ArcNode *head1; //出边表的表头指针; ArcNode *head2; //入边表的表头指针;};struct LGraph //图的邻接表存储结构;{ VNode vertexs[MAXN]; //顶点数组; int vexnum, arcnum; //顶点数,边(弧)数;};LGraph lg; //图(邻接表存储结构)
出度入度邻接表存储结构形式代码实现如下:
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#define MAXN 100#define INF 0xFFFFFFF#define RST(N)memset(N, 0, sizeof(N))using namespace std;struct ArcNode //边节点;{ int adjvex; //有向边的另一个邻接点的序号; ArcNode *nextarc; //指向下一个边节点的指针;};struct VNode //顶点;{ int data; //顶点信息; ArcNode *head1; //出边表的表头指针; ArcNode *head2; //入边表的表头指针;};struct LGraph //图的邻接表存储结构;{ VNode vertexs[MAXN]; //顶点数组; int vexnum, arcnum; //顶点数,边(弧)数;};LGraph lg; //图(邻接表存储结构)void CreateLG() //构造有向图G;{ ArcNode *pi; int v1, v2; for(int i=0; i<lg.vexnum; i++) { //初始化表头指针为空; lg.vertexs[i].head1 = lg.vertexs[i].head2 = NULL; } for(int i=0; i<lg.arcnum; i++) { scanf("%d %d", &v1, &v2); v1--, v2--; pi = new ArcNode; //添加出边; pi->adjvex = v2; pi->nextarc = lg.vertexs[v1].head1; lg.vertexs[v1].head1 = pi; pi = new ArcNode; //添加入边; pi->adjvex = v1; pi->nextarc = lg.vertexs[v2].head2; lg.vertexs[v2].head2 = pi; }}//释放图G邻接表各顶点的边链表中的所有边节点所占的内存空间;void Delete(){ ArcNode *pi; for(int i=0; i<lg.vexnum; i++) { pi = lg.vertexs[i].head1; while(pi != NULL) { lg.vertexs[i].head1 = pi->nextarc; delete pi; pi = lg.vertexs[i].head1; } pi = lg.vertexs[i].head2; while(pi != NULL) { lg.vertexs[i].head2 = pi->nextarc; delete pi; pi = lg.vertexs[i].head2; } }}int main(int argc, char *argv[]){ ArcNode *pi; int in_num, out_num; while(~scanf("%d %d", &lg.vexnum, &lg.arcnum)) { if(lg.vexnum == 0) break; CreateLG(); /****输出每条边的出度****/ for(int i=0; i<lg.vexnum; i++) { out_num = 0; pi = lg.vertexs[i].head1; while(pi != NULL) { out_num++; pi = pi->nextarc; } printf("%d", out_num); i == lg.vexnum-1 ? printf("\n") : printf(" "); } /****输出每条边的入度****/ for(int i=0; i<lg.vexnum; i++) { in_num = 0; pi = lg.vertexs[i].head2; while(pi != NULL) { in_num++; pi = pi->nextarc; } printf("%d", in_num); i == lg.vexnum-1 ? printf("\n") : printf(" "); } Delete(); } return 0;}
0 0
- 邻接表求有向图各顶点的入度和出度 (图论基础)
- 邻接矩阵求有向图各顶点的入度和出度 (图论基础)
- 图的实现--邻接表(求出各顶点的出度和入度)
- 用邻接表存储有向图,并输出各顶点的出入和入度
- 图的邻接表表示法及顶点入度、出度的计算方法
- 图的实现—邻接矩阵(求出各顶点的出度和入度)
- 用邻接矩阵存储有向图,并输出各顶点的出入和入度。
- 邻接多重表求顶点的度(无向图)
- 有向图邻接表求入度,出度,删除、增加顶点,弧,深度遍历及其生成树等
- 数据结构:不带权有向图的邻接矩阵和邻接表储存及求出入度实现
- 用邻接矩阵存储有向图 输出各点的出度和入度
- 有向图与无向图的邻接矩阵,邻接表 计算出度与入度
- 图的邻接矩阵表示法及顶点入度、出度的计算方法
- 有向图中各点的出度和入度
- 图2:邻接表的详细解释(包含存储和求出度和入度)
- 求有向图中某顶点的出度
- 十字链表求顶点的度(有向图)
- 图的邻接表存储结构及求各顶点的度
- HDU 1046 Gridland
- 运行python时报错:Non-ASCII character '\xe5' in file问题解决
- 通过反射读取配置文件,来打印图形
- 黑马程序员------[C]字符串操作
- 调度器的使用
- 邻接表求有向图各顶点的入度和出度 (图论基础)
- hdu 3635 并查集
- AFNetWorking2.0 post 出现code=-1016错误怎么解决?
- 公司学习----JS获取URL传过来的值
- UVa 216 网络连线
- 3个收缩/展开/折叠的js代码
- Oracle判断是否闰年
- 异常处理与MiniDump详解(4) MiniDump
- Matlab中使用varargin来实现参数可变的函数