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;
    }
    
    
    	


    每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
  • 相关阅读:
    POJ 2251 Dungeon Master
    HDU 3085 Nightmare Ⅱ
    CodeForces 1060 B Maximum Sum of Digits
    HDU 1166 敌兵布阵(树状数组)
    HDOJ 2050 折线分割平面
    HDU 5879 Cure
    HDU 1878 欧拉回路
    HDU 6225 Little Boxes
    ZOJ 2971 Give Me the Number
    HDU 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/6bing/p/3931250.html
Copyright © 2011-2022 走看看