Problem A
下三角矩阵
时间限制:1000 ms | 内存限制:65535 KB
- 描述
-
给定一个由0和1组成的矩阵。只允许交换相邻的两行,要把矩阵转化成下三角矩阵(主对角线上方的元素都是0),最少需要交换几次?输入的矩阵保证总能转化成下三角矩阵。
- 输入
- 多组测试数据。
每组测试数据第一行为一个整数n(1 <= n < 1000),表示矩阵的大小为n*n;
接下来n行,每行有n个数表示这个矩阵。 - 输出
- 输出最小需要交换的次数,单独占一行。
- 样例输入
-
3 0 0 1 1 0 0 0 1 0
- 样例输出
-
2
- 来源
- 原创
- 上传者
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[1005][1005]; int b[1005]; int main() { //freopen("250.txt","r",stdin); int n,i,j,d; while(scanf("%d",&n)==1) { memset(b,0,sizeof(b)); for(i=0;i<n;i++) for(j=0;j<n;j++) { scanf("%d",&a[i][j]); if(a[i][j]!=0) b[i]=j; } int num=0,temp=0; for(i=0;i<n;i++) { for(j=i;j<n;j++) { if(b[j]<=i) { temp=j; break; } } for(j=temp;j>i;j--) { d=b[j];b[j]=b[j-1];b[j-1]=d; num++; } } printf("%d ",num); } }