N阶行列式---常见的几种运算
今天刚学了离散数学中的关系,联想到线性代数中的矩阵,想到关系可用矩阵(N * N)表示,于是写了几个的程序,其中 N 表示行列式的阶数。
1. N 阶行列式相乘
#include<stdio.h> #include<stdlib.h> #include<string.h> int map_1[501][501], map_2[501][501];//map_1第一个行列式, map_2为第二个行列式 int a[501][501];//相乘后的行列式 int main() { memset(map_1, 0, sizeof(map_1));//数组清零 memset(map_2, 0, sizeof(map_2)); memset(a, 0, sizeof(a)); int N;// 表示N阶行列式 int n, m, x, y, i, j, k, num = 1; scanf("%d", &N); scanf("%d %d", &n, &m);//n 表示第一个行列式中有几组关系,m表示第二个行列式中有几组关系 for(i=1; i<=n; i++) { scanf("%d %d", &x, &y); map_1[x][y] = 1; } for(i=1; i<=m; i++) { scanf("%d %d", &x, &y); map_2[x][y] = 1; } for(i=1; i<=n; i++)//完成行列式相乘的代码 for(j=1; j<=n; j++) for(k=1; k<=n; k++) { if(map_1[i][k] == 1 && map_2[k][j] == 1) { a[i][j] = 1; break; } else a[i][j] = 0; } for(i=1; i<=N; i++)//输出相乘后的行列式 for(j=1; j<=N; j++) { printf("%d", a[i][j]); if(j<N) printf(" "); else printf("\n"); } return 0; }
2. 行列式转换
#include<stdio.h> #include<stdlib.h> #include<string.h> int map_1[501][501], map_2[501][501];//map_1第一个行列式, map_2为第二个行列式 int main() { memset(map_1, 0, sizeof(map_1));//数组清零 memset(map_2, 0, sizeof(map_2)); int N;// 表示N阶行列式 int n, x, y, i, j, k, num = 1; scanf("%d", &N); scanf("%d", &n);//n 表示第一个行列式中有几组关系,m表示第二个行列式中有几组关系 for(i=1; i<=n; i++) { scanf("%d %d", &x, &y); map_1[x][y] = 1; map_2[y][x] = 1; } printf("转置前的行列式\n"); for(i=1; i<=N; i++)//输出转置前的行列式 for(j=1; j<=N; j++) { printf("%d", map_1[i][j]); if(j<N) printf(" "); else printf("\n"); } printf("\n"); printf("转置后的行列式\n"); for(i=1; i<=N; i++)//输出转置后的行列式 for(j=1; j<=N; j++) { printf("%d", map_2[i][j]); if(j<N) printf(" "); else printf("\n"); } return 0; }
每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。