zoukankan      html  css  js  c++  java
  • 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("
    ");
    		}
    
    	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("转置前的行列式
    ");
    	for(i=1; i<=N; i++)//输出转置前的行列式
    		for(j=1; j<=N; j++)
    		{
    			printf("%d", map_1[i][j]);
    			if(j<N)
    				printf(" ");
    			else
    				printf("
    ");
    		}
    	printf("
    ");
    	printf("转置后的行列式
    ");
    	for(i=1; i<=N; i++)//输出转置后的行列式
    		for(j=1; j<=N; j++)
    		{
    			printf("%d", map_2[i][j]);
    			if(j<N)
    				printf(" ");
    			else
    				printf("
    ");
    		}
    
    
    	return 0;
    }
    
    
    	


    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    1301班 github安装及账户注册
    对于软件工程课程的疑问
    LeetCode50:Pow
    LeetCode49:字母异位词分组
    LeetCode46:全排列
    LeetCode38:外观数列
    LeetCode:有效的数独
    LeetCode34:在排序数组中查找元素的第一个位置和最后一个位置
    LeetCode33:搜索旋转排序数组
    LeetCode29:两数相除
  • 原文地址:https://www.cnblogs.com/6bing/p/3931250.html
Copyright © 2011-2022 走看看