图论实现邻接矩阵实验报告C语言

邻接矩阵的生成
一、实验目的
了解邻接矩阵的定义和其基本概念以及构建方式。

二、实验内容
1、根据已知图形的内容输入相关参数生成邻接矩阵;
2、用C语言编程来实现此算法。

用下面的实例来调试程序:
三、使用环境
Xcode编译器,编写语言C。

四、编程思路
邻接矩阵表示的是顶点与边的关系,因此需要一个一维数组Vertex[]来保存顶点的相关信息,一个二维数组Edges[][]来保存边的权植,因为C语言二维数组的输出需要用循环语句,因此为了方便,构造一个输出函数Out,用来打印数组各元素的数值。

五、调试过程
1.程序代码:
#include <stdio.h>
#define VERTEX_MAX 26//最大顶点数目
#define MAXVALUE 32767//顶点最大权值
//定义图
typedef struct
{
char Vertex[VERTEX_MAX]; //保存顶点信息
int Edges[VERTEX_MAX][VERTEX_MAX]; //保存边的权值
int isTrav[VERTEX_MAX]; //是否遍历
int VertexNum ; //顶点数目
int EdgeNum; //边的数目
}Graph;
//创建邻接矩阵
void Create(Graph *G)
{
int i,j,k,weight; //i,j,k分别为迭代数,weight是权值
char start,end; //边或者弧的起始顶点
printf("输入各个顶点的信息:\n"); //输入各个顶点的信息
for(i=0;i<G->VertexNum;i++)
{
getchar();
printf("这是第%d 个顶点的名字:",i+1);
scanf("%c",&(G->Vertex[i]));//保存到数组中
}
//输入每个边的起始顶点和权值
printf("输入每个边的起始顶点和权值,例如A,B,1:\n");
for(k=0;k<G->EdgeNum;k++)
{
getchar();
printf("这是第%d 个边:",k+1);
scanf("%c,%c,%d",&start,&end,&weight);//起点,终点,权值
for(i=0;start!=G->Vertex[i];i++);//查找起点
for(j=0;end!=G->Vertex[j];j++); //查找终点
G->Edges[i][j]=weight;//保存权值
G->Edges[j][i]=weight;
}
}
void Out(Graph *G) //输出邻接矩阵
{
int i,j;//迭代数
for(j=0;j<G->VertexNum;j++)
{
printf("\t%c",G->Vertex[j]);
} //第一行输出顶点信息
printf("\n");
for(i=0;i<G->VertexNum;i++)
{
printf("%c",G->Vertex[i]);
for(j=0;j<G->VertexNum;j++)
{
if(G->Edges[i][j]==MAXVALUE) //如果权是最大值就输出MAX printf("\tMAX");
else
printf("\t%d",G->Edges[i][j]);//否则就输出权值
}
printf("\n");
}
}
int main()
{
Graph G;
int i,j;//迭代数
//输入顶点数目和边的数目
printf("输入顶点数目和边的数目,例如1,2:");
scanf("%d,%d",&G.VertexNum,&G.EdgeNum);//保存顶点和边的数目
for(i=0;i<G.VertexNum;i++)//清空矩阵
for(j=0;j<G.VertexNum;j++)
G.Edges[i][j]=MAXVALUE;//设置各元素的值为最大值
Create(&G);//创建邻接矩阵
printf("邻接矩阵为:\n");
Out(&G);//输出邻接矩阵
getchar();
return0;
}
2.运行窗口:
在运行窗口输入:输出为:
则输出:
所以连通分支如下:。

合集下载

传递闭包实验报告

传递闭包实验报告

一、实验目的1. 理解传递闭包的概念及其在图论中的应用。

2. 掌握利用Floyd-Warshall算法求解传递闭包的方法。

3. 通过编程实现传递闭包的计算,验证算法的正确性。

4. 分析实验结果,加深对传递闭包性质的理解。

二、实验原理传递闭包是指在给定集合X上的二元关系R,找到一个最小的传递关系R,使得对于任意的x, y, z∈X,若xRy且yRz,则xRz成立。

传递闭包可以用来描述图中节点之间的可达性,是图论中一个重要的概念。

Floyd-Warshall算法是一种求解传递闭包的经典算法,它通过构建一个n×n的邻接矩阵A,其中A[i][j]表示节点i到节点j的可达性。

算法的基本思想是:逐步更新矩阵A,使得A[i][j]的值表示节点i到节点j的最短路径可达性。

三、实验内容1. 设计一个图,包括节点和边,并构建相应的邻接矩阵。

2. 利用Floyd-Warshall算法计算邻接矩阵的传递闭包。

3. 分析传递闭包的结果,验证算法的正确性。

4. 对比不同图结构下的传递闭包计算结果,探讨传递闭包的性质。

四、实验步骤1. 设计一个图,包括5个节点和6条边,如下所示:```1 -- 2| || |3 -- 4| || |5 -- 6```2. 构建邻接矩阵A,如下所示:```| 1 2 3 4 5 6 |1| 0 1 0 0 0 0 |2| 0 0 1 0 0 0 |3| 0 0 0 1 0 0 |4| 0 0 0 0 1 0 |5| 0 0 0 0 0 1 |6| 0 0 0 0 0 0 |```3. 编写Floyd-Warshall算法的代码,计算传递闭包。

```pythondef floyd_warshall(adj_matrix):n = len(adj_matrix)for k in range(n):for i in range(n):for j in range(n):if adj_matrix[i][j] > adj_matrix[i][k] + adj_matrix[k][j]:adj_matrix[i][j] = adj_matrix[i][k] + adj_matrix[k][j]return adj_matrix# 初始化邻接矩阵adj_matrix = [[0, 1, 0, 0, 0, 0],[0, 0, 1, 0, 0, 0],[0, 0, 0, 1, 0, 0],[0, 0, 0, 0, 1, 0],[0, 0, 0, 0, 0, 1],[0, 0, 0, 0, 0, 0]]# 计算传递闭包transitive_closure = floyd_warshall(adj_matrix) print(transitive_closure)```4. 分析传递闭包的结果,验证算法的正确性。

图论中邻接矩阵的应用

图论中邻接矩阵的应用

每个节点有 自己到 自己的一条边 。我们得 到 了锁 具各槽 之
问的关系示意图 ( 图 1 。 见 )
“ ”=口 口 + fI 口‘ J +… +口口
() 1

而从 到 v 长 k+1的道路无非是从 经 k步到某顶点 i ( ≤Z ) 再从 走一步到 ; 1 ≤n , 由归纳假设从 到 长为 k
0 0 0 1 1 0 0 1 1 0
邻 接矩阵 A的所 有元素 之和表示两 个槽高无 1 6相邻 , 的锁具 的个 数 , 每个无 16相邻 的 5位数 与 图 1中长度 为 4 , 的一 条链 1 —1对应 , 13 5 1 1 12 35等。A的 k 如 2 4 ,11 ,2 3 次方 A 中各元素之 和就 是长 度 为 k的链 的个数 。事实 上 , 这 从 个具 体问题 可 以看 出 , 中第 i 第 列 的元 素指从 i A 行 开始
1 1 1 1 A = 1 1 1 1 1 1 1 1 1 1 1 1
刘亚国 : 图论 中邻接 矩阵的应 用
1 0
1 1 1 1 Al =
1 9
0 0 0 0 0 0 0 0 0 0
图 1 锁具各槽问的关 系示意图
该图的邻接矩阵为
收 稿 日期 :07—1 2 20 0— 4
作者简介 : 刘亚 国(99一) 男, 17 , 湖北孝感人 , 河源职业技 术学院助教 , 事基础数 学与应 用及 数学模 型研 究。 从
维普资讯
第 2期
的道路共计o条, : 而从 到 v长为 1 j 的道路为 %条, 所以长
为 k+1 的从 经 k步到 再一步到 v的道路共有 0 i 故从 经 k +1步到 v 的路径共有 。 j “) o o条。 -

数据结构 实验报告

数据结构 实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中非常重要的一门课程,通过本次实验,旨在加深对常见数据结构(如链表、栈、队列、树、图等)的理解和应用,提高编程能力和解决实际问题的能力。

二、实验环境本次实验使用的编程语言为C++,开发工具为Visual Studio 2019。

操作系统为 Windows 10。

三、实验内容1、链表的实现与操作创建一个单向链表,并实现插入、删除和遍历节点的功能。

对链表进行排序,如冒泡排序或插入排序。

2、栈和队列的应用用栈实现表达式求值,能够处理加、减、乘、除和括号。

利用队列实现银行排队系统的模拟,包括顾客的到达、服务和离开。

3、二叉树的遍历与操作构建一棵二叉树,并实现前序、中序和后序遍历。

进行二叉树的插入、删除节点操作。

4、图的表示与遍历用邻接矩阵和邻接表两种方式表示图。

实现图的深度优先遍历和广度优先遍历。

四、实验步骤及结果1、链表的实现与操作首先,定义了链表节点的结构体:```cppstruct ListNode {int data;ListNode next;ListNode(int x) : data(x), next(NULL) {}};```插入节点的函数:```cppvoid insertNode(ListNode& head, int val) {ListNode newNode = new ListNode(val);head = newNode;} else {ListNode curr = head;while (curr>next!= NULL) {curr = curr>next;}curr>next = newNode;}}```删除节点的函数:```cppvoid deleteNode(ListNode& head, int val) {if (head == NULL) {return;}ListNode temp = head;head = head>next;delete temp;return;}ListNode curr = head;while (curr>next!= NULL && curr>next>data!= val) {curr = curr>next;}if (curr>next!= NULL) {ListNode temp = curr>next;curr>next = curr>next>next;delete temp;}}```遍历链表的函数:```cppvoid traverseList(ListNode head) {ListNode curr = head;while (curr!= NULL) {std::cout << curr>data <<"";curr = curr>next;}std::cout << std::endl;}```对链表进行冒泡排序的函数:```cppvoid bubbleSortList(ListNode& head) {if (head == NULL || head>next == NULL) {return;}bool swapped;ListNode ptr1;ListNode lptr = NULL;do {swapped = false;ptr1 = head;while (ptr1->next!= lptr) {if (ptr1->data > ptr1->next>data) {int temp = ptr1->data;ptr1->data = ptr1->next>data;ptr1->next>data = temp;swapped = true;}ptr1 = ptr1->next;}lptr = ptr1;} while (swapped);}```测试结果:创建了一个包含 5、3、8、1、4 的链表,经过排序后,输出为 1 3 4 5 8 。

图的上机实验报告

图的上机实验报告

图的上机实验报告一、实验目的本次实验的目的是进一步了解图的概念、图的存储结构和图的遍历算法,并通过具体的上机实验来熟悉图的相关操作。

二、实验环境- 操作系统:Windows 10- 编程语言:C++- 开发环境:Visual Studio 2019三、实验内容本次实验主要包括以下几个方面的内容:1.图的基本概念首先,我们需要了解图的基本概念。

图是一种非线性的数据结构,由顶点集合和边集合构成。

顶点代表图中的一个节点,而边则代表顶点之间的关系。

图可以分为有向图和无向图,其中有向图的边是有方向的,而无向图的边是无方向的。

2.图的存储结构图的存储结构有两种常见的方式:邻接矩阵和邻接表。

邻接矩阵是用一个二维数组来表示图的结构,数组中的元素表示两个顶点之间是否有边。

邻接表则是由一个链表数组组成,每个数组元素对应一个顶点,链表中存储了与该顶点相邻的其他顶点。

3.图的遍历算法图的遍历算法有两种常见的方式:深度优先搜索(DFS)和广度优先搜索(BFS)。

深度优先搜索是从某个顶点开始,递归地访问该顶点的邻接顶点,直到无法再继续深入为止,然后回溯到之前的顶点。

而广度优先搜索是从某个顶点开始,依次访问该顶点的所有邻接顶点,然后按照同样的方式访问邻接顶点的邻接顶点,直到所有顶点都被访问完毕。

四、实验步骤根据上述内容,我们进行了如下实验步骤:1. 创建一个图对象,选择合适的存储结构(邻接矩阵或邻接表);2. 根据实际需求,添加图的顶点和边;3. 选择相应的遍历算法(DFS或BFS);4. 遍历图,输出遍历结果。

五、实验结果在实验过程中,我们成功地创建了一个图对象,并使用邻接矩阵存储了图的结构。

然后,我们添加了一些顶点和边的信息,并选择了深度优先搜索算法进行遍历。

最后,我们成功地遍历了整个图,并输出了遍历结果。

六、实验总结通过本次实验,我们进一步掌握了图的基本概念、图的存储结构和图的遍历算法。

同时,我们也了解到不同的存储结构和遍历算法在不同的应用场景中,有着各自的优缺点。

国家开放大学《数据结构》课程实验报告(实验5——图的存储方式和应用)参考答案

国家开放大学《数据结构》课程实验报告(实验5——图的存储方式和应用)参考答案
{
scanf("%d%d",&i,&j);
GA[i][j]=GA[j][i]=1;
}
}
else if(k1==0 && k2!=0) /*建立无向有权图*/
{
printf("输入%d条无向有权边的起点和终点序号及权值!\n",e);
for(k=1; k<=e; k++)
{
scanf("%d%d%d",&i,&j,&w);
printf("输入待处理图的顶点数和边数:");
scanf("%d%d",&n,&e);
/*输入有无向选择和有无权选择*/
printf("输入有无向选择和有无权选择(0为无,非0为有):");
scanf("%d%d",&k1,&k2);
CreateMatrix(gv,ga,n,e,k1,k2); /*建立图的邻接矩阵*/
printf("%6s","∞");
else
printf("%6d",GA[i][j]);
}
printf("\n");
}
}
实验结果:
测试用例1无向无权图如下图所示。
程序运行结果如下:
测试用例2有向有权图如下图所示。
程序运行结果如下:




(1)具有n个顶点的图,其邻接矩阵为n×n阶方阵,用二维数组存储,行列下标为0~n-1。
{
int i,j;
printf("顶点");

图论算法(C版)

图论算法(C版)


int circuit[maxn];
//用来记录找到的欧拉路的路径

int n,e,circuitpos,i,j,x,y,start;

void find_circuit(int i)
//这个点深度优先遍历过程寻找欧拉路

{

int j;

for (j = 1; j <= n; j++)

if (g[i][j] == 1)
•}
• 主程序如下:
• int main()
•{
• ……
• memset(visited,false,sizeof(visited));
• for (int i = 1; i <= n; i++)
//每一个点都作为起点尝试访问,因为不是从任何

//一点开始都能遍历整个图的,例如下面的两个图。

if (!visited[i])
• (b)无向图:图的边没有方向,可以双向。(b)就是一个无向图。
1
1
• 结点的度:无向图中与结点相连的边的数目,称为结点的度。 5
25
2
• 结点的入度:在有向图中,以这个结点为终点的有向边的数目。 4
• 结点的出度:在有向图中,以这个结点为起点的有向边的数目。
3
43
• 权值:边的“费用”,可以形象地理解为边的长度。

}

…………

return 0;
•}
• 建立邻接矩阵时,有两个小技巧:

初始化数组大可不必使用两重for循环。

1) 如果是int数组,采用memset(g, 0x7f, sizeof(g))可全部初始化为一个很大的数(略小于0x7fffffff),使用

数据结构实验报告-无向图的邻接矩阵存储结构

数学与计算机学院课程设计说明书课程名称: 数据结构与算法课程设计课程代码: 6014389 题目: 无向图的邻接矩阵存储结构年级/专业/班: 2010级软件4班学生姓名: 吴超学号: 312010*********开始时间: 2011 年 12 月 9 日完成时间: 2011 年 12 月 30 日课程设计成绩:指导教师签名:年月日数据结构课程设计任务书学院名称:数学与计算机学院课程代码:__6014389______ 专业:软件工程年级:2010一、设计题目无向图的邻接矩阵存储结构二、主要内容图是无向带权图,对下列各题,要求写一算法实现。

1)能从键盘上输入各条边和边上的权值;2)构造图的邻接矩阵和顶点集。

3)输出图的各顶点和邻接矩阵4)插入一条边5)删除一条边6)求出各顶点的度7)判断该图是否是连通图,若是,返回1;否则返回0.8)使用深度遍历算法,输出遍历序列。

三、具体要求及应提交的材料用C/C++语言编程实现上述内容,对每个问题写出一个算法实现,并按数学与计算机学院对课程设计说明书规范化要求,写出课程设计说明书,并提交下列材料:1)课程设计说明书打印稿一份2)课程设计说明书电子稿一份;3)源程序电子文档一份。

四、主要技术路线提示用一维数组存放图的顶点信息,二维数组存放各边信息。

五、进度安排按教学计划规定,数据结构课程设计为2周,其进度及时间大致分配如下:六、推荐参考资料[1] 严蔚敏,吴伟民.数据结构.清华大学出版社出版。

[2] 严蔚敏,吴伟民. 数据结构题集(C语言版) .清华大学出版社.2003年5月。

[3]唐策善,李龙澎.数据结构(作C语言描述) .高等教育出版社.2001年9月[4] 朱战立.数据结构(C++语言描述)(第二版本).高等出版社出版.2004年4月[5]胡学钢.数据结构(C语言版) .高等教育出版社.2004年8月指导教师签名日期年月日系主任审核日期年月日目录引言 (7)1 需求分析 (7)1.1任务与分析 (7)1.2测试数据 (8)2 概要设计 (8)2.1 ADT描述 (8)2.2程序模块结构 (9)2.3各功能模块 (11)3详细设计 (11)3.1类的定义 (11)3.2 初始化 (12)3.3 图的构建操作 (13)3.4 输出操作 (13)3.5 get操作 (14)3.6 插入操作 (14)3.7 删除操作 (15)3.8 求顶点的度操作 (15)3.10 判断连通操作 (17)3.11 主函数 (17)4 调试分析 (17)4.1 测试数据 (20)4.2调试问题 (20)4.3 算法时间复杂度 (20)4.4 经验和心得体会 (21)5用户使用说明 (21)6测试结果 (21)6.1 创建图 (21)6.2插入节点 (22)6.3 深度优先遍历 (22)6.4 求各顶点的度 (22)6.5 输出图 (23)6.6 判断是否连通 (23)6.7 求边的权值 (24)6.8 插入边 (24)6.9 删除边 (25)结论 (26)致谢 (27)摘要随着计算机的普及,涉及计算机相关的科目也越来越普遍,其中数据结构是计算机专业重要的专业基础课程与核心课程之一,为适应我国计算机科学技术的发展和应用,学好数据结构非常必要,然而要掌握数据结构的知识非常难,所以对“数据结构”的课程设计比不可少。

3数据结构与算法实验报告-图

沈阳工程学院学生实验报告(课程名称:数据结构与算法)实验题目:图班级计算机121学号2012417116 姓名赵玉林地点F608 指导教师张欣实验日期: 2013 年11 月28 日一、实验目的1.掌握图的基本存储方法。

2.掌握有关图的操作算法并用高级语言实现。

3.熟练掌握图的两种搜索路径的遍历方法。

4.掌握图的有关应用。

二、实验环境Turbo C或是Visual C++三、实验内容与要求实验1 建立无向图的邻接矩阵或邻接表存储并输出本题给出了一个无向图的邻接矩阵存储表示,在此基础上稍加改动就可以实现有向图、无向图和有向网的邻接矩阵表示。

实验2 建立图的邻接矩阵或邻接表存储并在此基础上实现图的深度优先遍历和广度优先遍历图的广度优先遍历用非递归方法很容易理解,非递归方法需要辅助队列Q以及出队、入队函数。

四、实验过程及结果分析源代码:#include<stdio.h>#include<malloc.h>#define MAX_NUM 20#define OK 1#define ERROR -1typedef int ElemType;typedef char VertexType;typedef struct ArcNode{ //定义弧结点ElemType data;ArcNode *nextarc;}ArcNode,*ArcLink;typedef struct VNode{ //定义顶点结点VertexType data;ArcLink firstarc;}VNode,AdjList[MAX_NUM];typedef struct{AdjList vdata;int vexnum,arcnum;}ALGraph;//构建图的邻接表int Creategraph(ALGraph &G,int n){ ArcLink p;int e,i;char v,w;for(i=0;i<n;i++){G.vdata[i].data='A'+i;G.vdata[i].firstarc=NULL;}printf("输入边的个数:\n");scanf("%d",&e);for(i=0;i<e;i++){getchar();//接收scanf的回车符printf("请输入某边所依附的两个顶点用A--%C表示\n",'A'+n-1); scanf("%c%c",&v,&w);//fflush(stdin);printf("V=%c,W=%c,I=%d\n",v,w,i);p=(ArcLink )malloc(sizeof(ArcNode));p->data=(int)(w-'A'+1);printf("%d\n",p->data);p->nextarc=G.vdata[(int)(v-'A')].firstarc;G.vdata[(int)(v-'A')].firstarc=p;p=(ArcLink)malloc(sizeof(ArcNode));p->data=(int)(v-'A'+1);p->nextarc=G.vdata[(int)(w-'A')].firstarc;G.vdata[(int)(w-'A')].firstarc=p;}G.vexnum=n; G.arcnum=e;return OK;}//输出邻接表int printGraph(ALGraph G){ArcLink p;int i;for(i=0;i<G.vexnum;i++){printf("%2d %c",i,G.vdata[i]);for(p=G.vdata[i].firstarc;p!=NULL;p=p->nextarc){ printf("-->");printf("%d",p->data);}printf("\n");}return OK;}int main(){ALGraph G;int n;printf("请输入你要构建的无向图的顶点个数:\n"); scanf("%d",&n);Creategraph(G,n);printf("你所构建的无向图的邻接表如下所示:\n"); printGraph(G);return OK;}1-1建立无向图的顶点数1-2建立无向图的边数1-3建立无向图五、成绩评定优良中及格不及格出勤内容格式创新效果总评指导教师:年月日。

C语言版数据结构实验报告

经过这次这么复杂的程序实验,我终于发现了调用函数的巨大优越性,以前遇到都是很短的程序,感觉调用有点多余,但复杂的程序时,如果不采用调用的话,会使程序非常的乱,改程序时不知道从哪改,调用函数能够更好使程序简洁话,层次话,更加容易让人看懂这次试验的逻辑性给了我们很大启发通过本次实验让我对图有了更深刻的认识,再通过多次的更改后终于将实验做出来,在实验中也出现了许多问题,有不出结果,有不能运行的,但最终只要努力都会搞定的
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i, j的值依次为1,2,...10-i。
经过这次这么复杂的程序实验,我终于发现了调用函数的巨大优越性,以前遇到都是很短的程序,感觉调用有点多余,但复杂的程序时,如果不采用调用的话,会使程序非常的乱,改程序时不知道从哪改,调用函数能够更好使程序简洁话,层次话,更加容易让人看懂
这次试验的逻辑性给了我们很大启发,在程序不断复杂的今天只有很好了解程序的过程,把握程序中心思想才能够更好的完善研发程序,在不断的累积中达到更高的层次。
用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i, j的值依次为1,2,...10-i。
三、运行输出结果:
四、调试和运行程序过程中产生的问题及采取的措施:

洛谷邻接矩阵、邻接表的例题c++

洛谷邻接矩阵、邻接表的例题c++一、概述在学习和理解图的基本概念时,邻接矩阵和邻接表是两种常用的表示方法。

它们可以帮助我们更加直观地理解和分析图的结构和特性。

本文将以洛谷上的一个例题为例,介绍如何使用C++语言结合邻接矩阵和邻接表来解决图相关问题。

二、洛谷例题描述题目描述:给定一个有向图,图中包含n个节点和m条边,每条边连接两个节点。

现在需要求解图中每个节点的入度和出度。

输入格式:第一行包含两个整数n和m,分别表示节点数和边数。

接下来m行,每行包含两个整数a和b,表示图中存在一条边从a指向b。

输出格式:按照节点编号从小到大的顺序,输出每个节点的入度和出度。

三、解题思路1. 使用邻接矩阵表示图的结构;2. 使用邻接表统计每个节点的入度和出度。

四、基于邻接矩阵和邻接表的C++程序实现```cpp#include <iostream>#include <vector>using namespace std;const int MAXN = 1005;int n, m;int g[MAXN][MAXN]; // 邻接矩阵vector<int> inDegree(MAXN, 0); // 入度vector<int> outDegree(MAXN, 0); // 出度int m本人n() {cin >> n >> m;// 初始化邻接矩阵for (int i = 0; i < m; i++) {int a, b;cin >> a >> b;g[a][b] = 1;}// 统计入度和出度for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (g[i][j] == 1) { // 有一条边从i指向joutDegree[i]++;inDegree[j]++;}}}// 输出结果for (int i = 1; i <= n; i++) {cout << "节点" << i << "的入度为:" << inDegree[i] << ",出度为:" << outDegree[i] << endl;}return 0;}```五、测试样例输入样例:```5 61 21 32 32 43 44 5```输出样例:```节点1的入度为:0,出度为:2节点2的入度为:1,出度为:2节点3的入度为:2,出度为:2节点4的入度为:2,出度为:1节点5的入度为:1,出度为:0```六、总结通过本文的讲解,我们了解了如何使用C++语言结合邻接矩阵和邻接表来解决有关图的问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档