离散数学将以下代码修改为已知有向图求邻接矩阵c语言#include "stdio.h" #define n 4 #define m 7 void output(int M[n][m]) { int i,j; for(i=0;i<n;i++) { for(j=0;j<m;j++) printf("%3d ",M[i][j]); printf("\n"); } } void Correlation_Matrix(int Mg[n][m],int E[m][2]) { int i,j,k; for (i=0;i<m;i++) { j=E[i][0]; k=E[i][1]; Mg[j][i]=1; Mg[k][i]=-1; } } int main() { int v[n]={1,2,3,4}; int Mg[n][m]={0}; int E[m][2]={{4,1},{1,2},{4,3},{4,3},{3,1},{1,3},{2,3}}; Correlation_Matrix(Mg,E); printf("所给图的关联矩阵为:\n"); output(Mg); int node = 3; // 假设需要计算的点为第0个节点 int in_degree = 0; // 初始化入度为0 int out_degree = 0; // 初始化出度为0 for (int i = 0; i < m; i++) { if (Mg[node][i] == -1) { // 如果第node个节点是第i条边的终点 out_degree++; // 则出度加1 } else if (Mg[node][i] == 1) { // 如果第node个节点是第i条边的起点 in_degree++; // 则入度加1 } } printf("该点的入度为%d,出度为%d\n", in_degree, out_degree); }
时间: 2023-06-27 08:04:47 浏览: 79
以下是修改过后的代码:
```c
#include "stdio.h"
#define n 4
#define m 7
void output(int M[n][m]) {
int i,j;
for(i=0;i<n;i++) {
for(j=0;j<m;j++) {
printf("%3d ",M[i][j]);
}
printf("\n");
}
}
void Correlation_Matrix(int Mg[n][m],int E[m][2]) {
int i,j,k;
for (i=0;i<m;i++) {
j=E[i][0]-1; // 注意数组下标从0开始,需要将节点编号减1
k=E[i][1]-1; // 同上
Mg[j][i]=1;
Mg[k][i]=-1;
}
}
int main() {
int v[n]={1,2,3,4};
int Mg[n][m]={0};
int E[m][2]={{4,1},{1,2},{4,3},{4,3},{3,1},{1,3},{2,3}};
Correlation_Matrix(Mg,E);
printf("所给图的关联矩阵为:\n");
output(Mg);
int node = 2; // 计算第3个节点(下标从0开始)的度数
int in_degree = 0; // 初始化入度为0
int out_degree = 0; // 初始化出度为0
for (int i = 0; i < m; i++) {
if (Mg[node][i] == -1) { // 如果第node个节点是第i条边的终点
out_degree++; // 则出度加1
} else if (Mg[node][i] == 1) { // 如果第node个节点是第i条边的起点
in_degree++; // 则入度加1
}
}
printf("该点的入度为%d,出度为%d\n", in_degree, out_degree);
return 0;
}
```
主要修改:
1. 在 `Correlation_Matrix` 函数中,将节点编号减1,以适应数组下标从0开始的要求。
2. 在 `main` 函数中,将需要计算度数的节点下标修改为2(即第3个节点)。
3. 添加了 `return 0;` 语句,以保证函数正确返回。
阅读全文