c++ - 矩阵的传递性
问题描述
我正在尝试实现一个 c++ 解决方案来查找 n*n 元素的二进制矩阵是否是可传递的。这是条件:
矩阵 M 是可传递的当且仅当对于任何元素 a, b, c (a != b != c) 使得 M[a][b] = 1 和 M[b][c] = 1 条件 M [a][c] = 1 为真。
如果矩阵是可传递的,则输出应为 1,否则为 0。
我的代码:
#include<iostream>
using namespace std;
int main() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int n;
bool trans = true;
cin >> n;
int **m = new int*[n];
for (int i = 0; i < n; i++) {
m[i] = new int[n];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> m[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (m[i][j] == 1 && m[j][i] == 1 && m[i][i] != 1)
trans = false;
}
}
if (trans)
cout << 1;
else
cout << 0;
}
该代码没有通过我要提交的电子法官。可能是什么问题?
解决方案
#include<iostream>
using namespace std;
int main() {
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
int n;
bool trans = true;
cin >> n;
int **m = new int*[n];
for (int i = 0; i < n; i++) {
m[i] = new int[n];
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> m[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
for (int k = 0; k < n; k++)
{
if ((i!=j && j!=k) && !(m[i][j] == 1 && m[j][k] == 1 && m[k][i] == 1))
trans = false;
}
}
}
if (trans)
cout << 1;
else
cout << 0;
}
试试这个代码,这应该可以正常工作
推荐阅读
- facebook - 没有下一个 url 用于在 facebook 的商业帐户图形 API 上获取 instagram 媒体
- python - 如何绘制有序的水平条
- python - 如何找到具有最大元素数的最大字符串类型子列表(非重复)?
- outlook - 无法在 Outlook 版本 16 的草稿文件夹中保存 applescripts 创建的电子邮件
- r - Exact word matching instead of in between strings matches
- ios - Static Dispatch with Final performance comparison
- python - Convert XGBoost to PMML in python
- bootstrap-4 - 为什么这些引导按钮相互接触?
- javascript - Hot to import JS module in browser environment?
- javascript - How do I get the text of my WordPress posts left indented?