图的矩阵表示输出入度出度
图的矩阵表示可以用邻接矩阵或者关联矩阵来表示。邻接矩阵是一个n*n的矩阵,其中n是图中节点的数量。如果节点i和节点j之间有一条边,则邻接矩阵中第i行第j列的元素为1,否则为0。对于无向图,邻接矩阵是对称的。邻接矩阵可以用来输出每个节点的入度和出度,节点i的入度是第i列中所有为1的元素的个数,节点i的出度是第i行中所有为1的元素的个数。
关联矩阵是一个n*m的矩阵,其中n是图中节点的数量,m是图中边的数量。如果节点i是边j的起点,则关联矩阵中第i行第j列的元素为-1,如果节点i是边j的终点,则关联矩阵中第i行第j列的元素为1,否则为0。关联矩阵可以用来输出每个节点的入度和出度,节点i的入度是关联矩阵中所有值为-1的元素的个数,节点i的出度是关联矩阵中所有值为1的元素的个数。
输出邻接矩阵的入度出度
邻接矩阵是一种常用的图存储方式,它可以通过一个二维数组表示图中各个顶点之间的关系。如果我们要输出邻接矩阵的入度和出度,可以采用如下方式:
对于一个有向图而言,每个顶点的出度指的是从该顶点出发可以到达的其他顶点的数量,而入度指的是能够到达该顶点的其他顶点的数量。
对于一个无向图而言,每个顶点的度数指的是与该顶点相连的边的数量。
如果我们已经构建好了邻接矩阵,那么我们可以遍历整个矩阵,对于每个顶点,分别计算它的入度和出度。
具体地,对于第 i 个顶点,我们可以在邻接矩阵中遍历第 i 行和第 i 列,分别统计非零元素的数量,这就是该顶点的出度和入度。
邻接矩阵和邻接表c语言计算入度出度
在图论中,邻接矩阵和邻接表是两种常用的表示图的数据结构。
邻接矩阵:它是一个二维数组,其中的元素表示两个顶点之间是否存在边。如果第i行第j列的值为非零,表示从顶点i到顶点j有一条边。计算每个顶点的入度(即指向它的边的数量)和出度(即从它出发的边的数量),可以通过遍历矩阵的对应行和列来进行。例如,在矩阵adjMatrix[i]
中,入度为第i行的所有非零元素之和,出度则为第i列的所有非零元素之和。
int getDegreeAdjMat(int adjMatrix[][n], int vertex) {
int inDegree = 0, outDegree = 0;
for (int i = 0; i < n; i++) {
if (adjMatrix[vertex][i] != 0) {
inDegree++; // 如果有向边,增加入度
outDegree += adjMatrix[i][vertex]; // 如果无向边,两边都算一次
}
}
return inDegree, outDegree;
}
邻接表:它是一系列链表,每个链表节点包含一个顶点及其连接的相邻顶点列表。对于邻接表,我们需要遍历每个顶点的链表,统计经过该顶点的边数。由于邻接表通常只存储直接相连的顶点,入度和出度可以在链表上分别累加:
struct Edge {
int destination;
struct Edge* next;
};
void computeDegrees(struct Edge** adjList, int numVertices, int* inDegree, int* outDegree, int vertex) {
struct Edge* current = adjList[vertex];
*inDegree = 0;
while (current != NULL) {
*inDegree++;
current = current->next;
}
current = adjList[vertex]; // 再次从头开始找,因为可能有多个出边
*outDegree = 0;
while (current != NULL) {
*outDegree++;
current = current->destination->adjList;
}
}
相关推荐
















