程序设计竞赛题集

来源:互联网 发布:mac系统安装steam 编辑:程序博客网 时间:2024/06/05 00:12




crazy rows 2009 二维小模拟


/*一个0 1 组成的矩阵 只允许交换相邻的两行 要把矩阵转化为下三角的矩阵  最少需要交换几次?1 1 1 0         10001 1 0 0   -》   11001 1 0 0   -》   11001 0 0 0         1110N 1-8  1-40*/#include<iostream>using namespace std;const int maxn=50;int n;int m[maxn][maxn];//矩阵int a[maxn];//a[i] 表示第i行最后出现的1的位置 ------- 1~n-1void slove(){int res=0;for(int i=0;i<n;i++){a[i]=-1;for(int j=0;j<n;j++)  //对i进行处理 不断跟新直到更新为最大值为止{if(m[i][j]==1)a[i]=j;}}int pos;for(int i=0;i<n;i++)  //            a[1-4]={3 2 2 1}{pos=-1;    //要移动到第i行的行for(int j=i;j<n;j++){if(a[j]<=i){pos=j;break;}}for(int j=pos;j>i;j--){swap(a[j],a[j-1]);res++;}}cout<<res<<endl;}int main(){cin>>n;for(int i=0;i<n;i++)for(int j=0;j<n;j++)cin>>m[i][j];slove();return 0;}

原创粉丝点击