离散数学将以下代码修改为已知有向图求邻接矩阵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-26 14:10:32 浏览: 76
以下是已知有向图求邻接矩阵的修改代码:
```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,3},{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;
}
```
主要的修改包括:
1. 将原来的关联矩阵修改为邻接矩阵;
2. 修改输入数据的格式,将原来的节点编号从1开始改为从0开始;
3. 修改计算入度和出度的方法,通过遍历邻接矩阵中每个节点的值来判断是否能到达目标节点。
阅读全文