离散数学将以下代码修改为已知有向图求V4到V1长度为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:11 浏览: 94
#include stdio.h Q.docx
这代码是求有向图中一个节点的入度和出度的代码,需要修改为已知有向图求V4到V1长度为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 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 v1 = 0; // V1的下标为0
int v4 = 3; // V4的下标为3
int count = 0; // 初始化计数器为0
int temp[n][n] = {0}; // 临时矩阵
// 计算Mg的平方
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++) {
temp[i][j] += Mg[i][k] * Mg[k][j];
}
}
}
// 计算V4到V1长度为2的通路个数
count = temp[v4][v1];
printf("V4到V1长度为2的通路个数为%d\n", count);
return 0;
}
```
该代码先计算邻接矩阵Mg的平方,然后计算V4到V1长度为2的通路个数,最后输出结果。
阅读全文