用C++输入任意一个关系R的矩阵,输出关系Rn的矩阵
时间: 2023-05-27 19:07:37 浏览: 174
这里提供一个简单的算法:
1. 首先输入一个 n × n 的关系矩阵 R;
2. 输入需要求的幂次数 m;
3. 用一个 n × n 的数组 Rn 来保存 R 的 m 次幂;
4. 对于 R 的每一个元素 R[i][j],计算 Rn[i][j] 的值:Rn[i][j] = R[i][1] × R[1][j] + R[i][2] × R[2][j] + ... + R[i][n] × R[n][j];
5. 输出 Rn。
下面是示例代码:
```
#include <stdio.h>
#define MAX_SIZE 100
int main()
{
int R[MAX_SIZE][MAX_SIZE]; // 关系矩阵
int Rn[MAX_SIZE][MAX_SIZE]; // R 的 n 次幂
int n, m;
printf("请输入关系矩阵的大小 n:");
scanf("%d", &n);
printf("请输入关系矩阵 R:\n");
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
scanf("%d", &R[i][j]);
}
}
printf("请输入需要求的幂次数 m:");
scanf("%d", &m);
// 求 R 的 m 次幂
for (int k = 1; k <= m; ++k)
{
// 计算 R 的 k 次幂
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
int sum = 0;
for (int t = 0; t < n; ++t)
{
sum += R[i][t] * R[t][j];
}
Rn[i][j] = sum;
}
}
// 将 Rn 赋值给 R,以便下一次计算
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
R[i][j] = Rn[i][j];
}
}
}
printf("关系矩阵 R 的 %d 次幂为:\n", m);
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
printf("%d ", Rn[i][j]);
}
printf("\n");
}
return 0;
}
```
这个算法的时间复杂度为 O(n^3 × m),在 n 和 m 较大时可能会比较慢,可以考虑优化算法。
阅读全文