4537: n阶行列式 

Time Limit(Common/Java):1000MS/3000MS     Memory Limit:65536KByte
Total Submit: 28            Accepted:3

Description

设有n²个数,排列成n行n列的表

其中p1,p2,p3,...,pn是1到n的一个全排列。标准次序是从小到大。
注意在这n个元素的任一排列中,当两个元素的先后次序与标准次序不同时,就说有一个逆序,一个排列中所有逆序的总和叫做这个排列的逆序数。逆序数为奇数的排列叫做奇排列,反之为偶排列。τ为当前排列的逆序数。

Input

每组数据一个n,接下来有n*n个数据。0<n<10。输入直到n为0结束。

Output

对于每组数据,输出n阶行列式D的值,每组数据后一换行。

Sample Input

2
3 -2
2 1
0

Sample Output

case1: D=7.

Source

TOJ

我提供了两种写法,一种是其可以暴力算,但是复杂度还是挺高的

#include<iostream>
using namespace std;
__int64 det(__int64 *a, int n)
{
int i,j,m,c;
--n;
__int64 s=,b[n*n];
if(n==)return a[];
for(m=; m<=n+; m++)
{
c=;
for(i=; i<=n; i++)
for(j=; j<=n; j++)
if(!(i==||(j+)==m))
b[c++]=a[i*n+j+i];
if((m+)%)
s+=-*a[m-]*det(b,n);
else
s+=a[m-]*det(b,n);
}
return s;
}
int main()
{
__int64 a[];
int ca=,n,i,j;
while(cin>>n,n)
{
for(i=; i<n; i++)
for(j=; j<n; j++)
cin>>a[i*n+j];
cout<<"case"<<ca++<<": D="<<det(a,n)<<".\n\n";
}
return ;
}

化简成上三角行列式的

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[][];
ll det(int n)
{
ll ans=;
int sign=;
for(int i=; i<n; i++) //当前行
{
for(int j=i+; j<n; j++) //当前之后的每一行,因为每一行的当前第一个数要转化成0(想想线性代数中行列式的计算)
{
int x=i,y=j;
while(a[y][i])//利用gcd的方法,不停地进行辗转相除
{
ll t=a[x][i]/a[y][i];
for(int k=i; k<n; k++)
a[x][k]=a[x][k]-a[y][k]*t;
swap(x,y);
}
if(x!=i)//奇数次交换,则D=-D'整行交换
{
for(int k=; k<n; k++)swap(a[i][k],a[x][k]);
sign^=;
}
}
if(a[i][i]==)//斜对角中有一个0,则结果为0
{
return ;
}
else
ans=ans*a[i][i];
}
if(sign)ans*=-;
return ans;
}
int main()
{
int ca=,n,i,j;
while(cin>>n,n)
{
for(i=; i<n; i++)
for(j=; j<n; j++)
cin>>a[i][j];
cout<<"case"<<ca++<<": D="<<det(n)<<".\n\n";
}
return ;
}

TOJ4537: n阶行列式的更多相关文章

  1. 行列式(三):n阶行列式

    1.数学定义   n阶行列式定义如下: 2.算法实现 函数名: GetValue() 功能:返回一个行列式的值 Private Function GetValue() Dim gValue As Do ...

  2. n阶行列式计算----c语言实现(完结)

    花了半天时间,写了这个n阶行列式计算的程序,应该算是比较优美吧,有很多地方多次做了优化,程序占用内存不是很大,要是说小吧,也不合适,因为里边有一个递归,而且递归的深度还比较深.时间复杂度具体没有细看, ...

  3. 基于上三角变换或基于DFS的行(列)展开的n阶行列式求值算法分析及性能评估

    进入大一新学期,看完<线性代数>前几节后,笔者有了用计算机实现行列式运算的想法.这样做的目的,一是巩固自己对相关概念的理解,二是通过独立设计算法练手,三是希望通过图表直观地展现涉及的两种算 ...

  4. 线代: N阶行列式

    线性变换 将 (x, y) 变成 (2 x + y, x - 3 y) 就叫做线性变换, 这就是矩阵乘法, 用于表示一切线性变换. 几何上看, 把平面上的每个点 (x, y) 都变到 (2 x + y ...

  5. C#程序计算N阶行列式的值及N元一次方程组

    C#程序计算N阶行列式的值及N元一次方程组 用了挺长时间自行完成了C#程序计算N阶行列式的值及N元一次方程组.由于自己没有在网上查阅其他资料,所以只能硬着头皮用最朴素的思想和基础的算法进行编程.在给出 ...

  6. n阶行列式算法(c程序)

    #include<stdio.h> #include<math.h> #define N 100 //N比输入的阶数大即可 int main() {   int n,a[N][ ...

  7. 计算n阶行列式的模板

    之前在学习计数问题的时候也在网上找了很多关于行列式的资料 但是发现很多地方都只介绍2\3阶的情况 一些论文介绍的方法又看不懂 然后就一直耽搁着 今天恰好出到这样的题目 发现标算的代码简介明了 还挺开心 ...

  8. n阶行列式计算

    1.化为上下三角 该类型的矩阵.行列式在之前写过(https://www.cnblogs.com/wangzheming35/p/12906624.html),也建议记住这个行列式的结论. 当然不仅仅 ...

  9. n阶行列式的全排列求解(Java)

    上一个随笔,我介绍了全排列的递归求解,其中还有排列的逆序数等代码,这次我来介绍如何使用全排列计算行列式的值. 使用全排列求行列式的值,简单的描述就是: 对这个行列式每一行选取一个数,这些数处于行列式的 ...

随机推荐

  1. Jenkins中启动从节点时,出现问题如何解决,问题:No Known Hosts...

    Jenkins中,启动从节点时,出现如下问题如何解决:/root/.ssh/known_hosts [SSH] No Known Hosts file was found at /root/.ssh/ ...

  2. 洛谷 P2966 [USACO09DEC]牛收费路径Cow Toll Paths

    题目描述 Like everyone else, FJ is always thinking up ways to increase his revenue. To this end, he has ...

  3. 融云SDK触达用户数破20亿 王者风范双倍展现

    11月1日,融云SDK触达用户数突破20亿,业务增长速度及用户覆盖量再创即时通讯云领域新高.自去年11月10日公布SDK触达用户数破10亿以来,融云仅用了一年时间,便取得了触达用户数翻倍的成绩,迅猛的 ...

  4. Android(java)学习笔记120:BroadcastReceiver之 应用程序安装和卸载 的广播接收者

    国内的主流网络公司(比如网易.腾讯.百度等等),他们往往采用数据挖掘技术获取用户使用信息,从而采用靶向营销.比如电脑上,我们浏览网页的时候,往往会发现网页上会出现我们之前经常浏览内容的商业广告,这就是 ...

  5. Java压缩字符串工具类

    StringCompressUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.By ...

  6. TFS2018 找不到JRE 错误

    配置TFS 2018 server configurion 报错 : Search requires Oracle Server JRE 7 Update 55 or higher or JRE 8 ...

  7. Mybatis学习记录(1)

    1.Mybatis介绍     Mybatis是apache的一个开源项目iBatis,Mybatis是一个优秀的持久层框架,他对jdbc的操作数据库的过程进行封装,使开发者只需要关注sql本身,不需 ...

  8. 使用jquery.ajax实现省市的二级联动(SSH架构)

    首先实现jquery ajax的二级联动 要下载个jquery.js 我在这里就不准备了 自行百度下载 背景介绍:通过部门的ID来查找部门下的所有班级 我实现二级联动的思路是:先查询所有部门 显示在页 ...

  9. 源自http://www.cnblogs.com/sciencefans/p/4394861.html

    人脸识别的四大块:Face detection, alignment, verification and identification(recognization),本别代表从一张图中识别出人脸位置, ...

  10. untiy3d action管理机制的编写

    使用unity3d对于一些可视化强迫者来说,是一个不错的选择,但unity3d没有cocos2d的action管理机制,比如cocos2dx的CCMoveTo,CCScale等action,所以笔者通 ...