#include<stdio.h> #include<stdbool.h> #include <stdlib.h> #include<string.h> int n,m; int matrix[100][100][100]={ 0 }; int main() { scanf("%d\n",&n); scanf("%d",&m); char ch; int row, col; int a; getchar(); for(int i=0;i<m;i++){ a=1; while((ch=getchar())!='}'&&scanf("<%d,%d>", &row, &col)) {matrix[i][row][col]=1;}// 读入元素的值 getchar(); for(int t=0;t<n;t++) { for(int j=0;j<n;j++) { if(matrix[i][t][j]) { for(int k=0;k<n;k++) { if(matrix[i][j][k]) { if(!matrix[i][t][k]) a=0; } } } } } if(a==1) printf("1\n"); if(a==0) printf("0\n"); } return 0; } 修改这串代码使其输入3 3 {<1,1>,<2,2>} {<1,2>,<2,3>} {<1,2>,<2,3>,<1,3>}时输出1 0 1
时间: 2024-03-25 13:41:23 浏览: 52
修改后的代码如下:
```c
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
int n, m;
int matrix[100][100][100] = {0};
int main() {
scanf("%d\n", &n);
scanf("%d", &m);
char ch;
int row, col;
getchar();
for (int i = 0; i < m; i++) {
while ((ch = getchar()) != '}' && scanf("<%d,%d>", &row, &col)) {
matrix[i][row][col] = 1;
}
getchar();
bool flag = true;
for (int t = 0; t < n; t++) {
for (int j = 0; j < n; j++) {
if (matrix[i][t][j]) {
for (int k = 0; k < n; k++) {
if (matrix[i][j][k]) {
if (!matrix[i][t][k]) {
flag = false;
break;
}
}
}
}
if (!flag) break;
}
if (!flag) break;
}
if (flag)
printf("1\n");
else
printf("0\n");
}
return 0;
}
```
主要的修改在于读入矩阵的部分,需要在读入一个元素后调用 `getchar()` 去掉逗号和空格。另外,在计算每个矩阵是否为传递闭包时,需要使用 `flag` 变量来记录是否满足传递闭包的条件,如果不满足则直接跳出循环。
阅读全文