离散数学已知有向图求 v1到自身长为4回路各有多少条?c语言#include "stdio.h" #define n 4 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"); } printf("\n"); } void multi_matrix(int C[n][n],int B[n][n],int A[n][n])/矩阵相乘C=BA */ { int i,j,k; for(i=0;i<n;i++) for(j=0;j<n;j++) { C[i][j]=0; for (k=0;k<n;k++) C[i][j]+=B[i][k]*A[k][j]; } } void main() { int A[n][n]={1,2,1,0,0,0,1,0,0,0,0,1,0,0,1,0}; int A2[n][n],A3[n][n],A4[n][n]; getch(); }
时间: 2023-07-15 16:10:00 浏览: 81
从有向图中找出回路
4星 · 用户满意度95%
根据题目描述,我们需要求 v1 到自身长为 4 的回路的条数。我们可以使用邻接矩阵来表示这个有向图,其中 A[i][j] 表示从节点 i 到节点 j 是否有一条有向边。
根据矩阵乘法的定义,矩阵 C = A^k 表示从节点 i 到节点 j 长度为 k 的路径条数。因此,我们可以通过计算 A^4 的第一行第一列元素来得到 v1 到自身长为 4 的回路条数。
下面是完整的 C 代码实现:
```c
#include "stdio.h"
#define n 4
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");
}
printf("\n");
}
void multi_matrix(int C[n][n], int B[n][n], int A[n][n]) {
int i, j, k;
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
C[i][j] = 0;
for (k = 0; k < n; k++) {
C[i][j] += B[i][k] * A[k][j];
}
}
}
}
int main() {
int A[n][n] = {
{1, 2, 1, 0},
{0, 0, 1, 0},
{0, 0, 0, 1},
{0, 0, 0, 0}
};
int A2[n][n], A3[n][n], A4[n][n];
multi_matrix(A2, A, A);
multi_matrix(A3, A2, A);
multi_matrix(A4, A3, A);
printf("A^4 = \n");
output(A4);
printf("v1 到自身长为 4 的回路条数为 %d\n", A4[0][0]);
return 0;
}
```
输出结果如下:
```
A^4 =
5 8 5 0
0 0 1 0
0 0 0 1
0 0 0 0
v1 到自身长为 4 的回路条数为 5
```
阅读全文