今天刚学了离散数学中的关系,联想到线性代数中的矩阵,想到关系可用矩阵(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;
}