uva 684 Integral Determinant 行列式求值

题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=625

题意:给出一个n阶行列式,求值。

思路:模板参考http://blog.csdn.net/zhoufenqin/article/details/7779707

n阶行列式的性质:
性质1:行列式与他的转置行列式相等。
性质2:互换行列式的两行(列),行列式变号。
推论:若一个行列式中有两行的对应元素(指列标相同的元素)相同,则这个行列式为零。
性质3:行列式中某行的公共因子k,可以将k提到行列式外面来。
推论:行列式中有两行(列)元素对应成比例时,该行列式等于零。
性质4:行列式具有分行(列)相加性。
推论:如果将行列式某一行(列)的每个元素都写成m个数(m为大于2的整数)的和,则此行列式可以写成m个行列式的和。
性质5:行列式某一行(列)各元素乘以同一个数加到另一行(列)对应元素上,行列式不变。
 
可以把原来的行列式转化成上三角或者下三角行列式,那么行列式的值就是对角线的乘积。
 
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 using namespace std;
 5 int n;
 6 int a[35][35];
 7 void determinant()
 8 {
 9     int cnt = 0;
10     int ans = 1;
11     for(int i = 1; i <= n; i++)
12     {
13         for(int j = i+1; j <= n; j++)
14         {
15             int x, y;
16             x = i, y = j;
17             while(a[y][i])
18             {
19                 int t = a[x][i] / a[y][i];
20                 for(int k = 1; k <= n; k++)
21                 {
22                     a[x][k] = a[x][k] - a[y][k]*t;
23                 }
24                 swap(x, y);
25             }
26             if(x != i)
27             {
28                 for(int k = 1; k <= n; k++)
29                 {
30                     swap(a[x][k], a[y][k]);
31                 }
32                 cnt ^= 1;
33             }
34         }
35         if(a[i][i] == 0)
36         {
37             ans = 0; break;
38         }
39         else ans *= a[i][i];
40     }
41     if(cnt) ans *= -1;
42     printf("%d\n", ans);
43 }
44 int main() 
45 {
46    // freopen("in.txt", "r", stdin);
47     while(scanf("%d", &n))
48     {
49         if(n == 0)
50         {
51             printf("*\n"); 
52             break;
53         }
54         for(int i = 1; i <= n; i++)
55         {
56             for(int j = 1; j <= n; j++)
57             {
58                 scanf("%d", &a[i][j]);
59             }
60         }
61         determinant();
62     }
63     return 0;
64 }

 

posted @ 2016-03-20 13:36  下周LGD该赢了吧  阅读(365)  评论(0编辑  收藏  举报