离散数学将以下代码修改为已知有向图求图中长度为2的回路个数c语言#include "stdio.h" #define n 4 #define m 7 void output(int M[n][n]) { int i,j; for(i=0;i<n;i++) { for(j=0;j<n;j++) printf("%3d ",M[i][j]); printf("\n"); } } void Adjacency_Matrix(int Mg[n][n], int E[m][2]) { int i,j,k; for (i=0;i<m;i++) { j=E[i][0] - 1; // 起点 k=E[i][1] - 1; // 终点 Mg[j][k]=1; // 路径 } } int main() { int v[n]={1,2,3,4}; int Mg[n][n]={0}; int E[m][2]={{4,1},{1,2},{4,3},{4,3},{3,1},{1,1},{2,3}}; Adjacency_Matrix(Mg,E); printf("所给图的邻接矩阵为:\n"); output(Mg); int node = 2; // 假设需要计算的点为第3个节点 int in_degree = 0; // 初始化入度为0 int out_degree = 0; // 初始化出度为0 for (int i = 0; i < n; i++) { if (Mg[i][node] == 1) { // 如果第i个节点能到达第node个节点,则出度加1 out_degree++; } if (Mg[node][i] == 1) { // 如果第node个节点能到达第i个节点,则入度加1 in_degree++; } } printf("该点的入度为%d,出度为%d\n", in_degree, out_degree); return 0; }
时间: 2023-06-26 07:10:07 浏览: 94
这段代码是用邻接矩阵表示有向图,并且计算了一个节点的入度和出度。要求修改代码,计算图中长度为2的回路个数,可以使用Floyd算法进行计算。修改后的代码如下:
```
#include "stdio.h"
#define n 4
#define m 7
void output(int M[n][n]) {
int i,j;
for(i=0;i<n;i++) {
for(j=0;j<n;j++)
printf("%3d ",M[i][j]);
printf("\n");
}
}
void Adjacency_Matrix(int Mg[n][n], int E[m][2]) {
int i,j,k;
for (i=0;i<m;i++) {
j=E[i][0] - 1; // 起点
k=E[i][1] - 1; // 终点
Mg[j][k]=1; // 路径
}
}
int main() {
int v[n]={1,2,3,4};
int Mg[n][n]={0};
int E[m][2]={{4,1},{1,2},{4,3},{4,3},{3,1},{1,1},{2,3}};
Adjacency_Matrix(Mg,E);
printf("所给图的邻接矩阵为:\n");
output(Mg);
int count = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (Mg[i][j] == 1) { // 如果存在一条i到j的边
for (int k = 0; k < n; k++) {
if (Mg[j][k] == 1 && Mg[k][i] == 1) { // 如果存在j到k和k到i的边
count++; // 存在一个长度为2的回路
}
}
}
}
}
printf("该图中长度为2的回路个数为%d\n", count);
return 0;
}
```
阅读全文