nyoj858(下三角矩阵)(水题)

题目链接:click here~

代码如下:

01. #include
02. #include
03. #include
04. using namespace std;
05. int map[1010][1010];
06. int f[1010];
07. int n,ans;
08. void search()
09. {
10. memset(f,0,sizeof(f));
11. for(int i=1;i<=n;i++)
12. for(int j=n;j>=1;j--)
13. {
14. if(map[i][j])
15. {
16. f[i]=j;
17. break;
18. }      //f数组用来存每一行里面从右开始数第一个1的位置
19. }
20. ans=0;
21. for(int i=1;i<=n;i++)      //用两层for循环枚举所有的行找到列数小于行数的行的编号,然后交换
22. {
23. int pos=0;
24. for(int j=i;j<=n;j++)
25. {
26. if(f[j]<=i)
27. {
28. pos=j;
29. break;
30. }
31. }
32. for(int k=pos;k>i;k--)
33. {
34. swap(f[k],f[k-1]);
35. ans++;
36. }
37. }
38.  
39. }
40. int main()
41. {
42. while(scanf("%d",&n)!=EOF)
43. {
44. for(int i=1;i<=n;i++)
45. for(int j=1;j<=n;j++)
46. scanf("%d",&map[i][j]);
47. search();
48. printf("%d\n",ans);
49. }
50. return 0;
51. }


你可能感兴趣的:(水题题库)