fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int a[30][30];
  5. char s[30][30];
  6. int n,m;
  7.  
  8. void loop() {
  9. for(int i=0; i<m; i++) {
  10. for(int j=0; j<n; j++){
  11. s[i][j]=a[i][j]+'0';
  12. }
  13. }
  14. }
  15.  
  16. int solve(int number, int b, int k, int cnt) {
  17. if(a[b+1][k]==number) {
  18. a[b+1][k]=0;
  19. cnt=solve(number,b+1,k,cnt)+1;
  20. }
  21. if(a[b][k+1]==number) {
  22. a[b][k+1]=0;
  23. cnt=solve(number,b,k+1,cnt)+1;
  24. }
  25.  
  26. if(a[b-1][k]==number) {
  27. a[b-1][k]=0;
  28. cnt=solve(number,b-1,k,cnt)+1;
  29. }
  30.  
  31. if(a[b][k-1]==number) {
  32. a[b][k-1]=0;
  33. cnt=solve(number,b,k-1,cnt)+1;
  34. }
  35.  
  36. return cnt;
  37. }
  38.  
  39. void solve2(int b, int k, char number) {
  40. if(s[b+1][k]==number) {
  41. s[b+1][k]='.';
  42. solve2(b+1,k,number);
  43. }
  44. if(s[b][k+1]==number) {
  45. s[b][k+1]='.';
  46. solve2(b,k+1,number);
  47. }
  48.  
  49. if(s[b-1][k]==number) {
  50. s[b-1][k]='.';
  51. solve2(b-1,k,number);
  52. }
  53.  
  54. if(s[b][k-1]==number) {
  55. s[b][k-1]='.';
  56. solve2(b,k-1,number);
  57. }
  58. }
  59.  
  60. void swp() {
  61. for(int i=m-1; i>=1; i--) {
  62. for(int j=n-1; j>=0; j--) {
  63. if(s[i][j]=='.' && s[i-1][j]!='.') {
  64. swap(s[i-1][j], s[i][j]);
  65. }
  66. }
  67. }
  68. }
  69.  
  70. int main() {
  71. cin >> m >> n;
  72.  
  73. for(int i=0; i<m; i++) {
  74. for(int j=0; j<n; j++) {
  75. cin >> a[i][j];
  76. }
  77. }
  78.  
  79. loop();
  80. vector<int> res;
  81. pair<int,int>data[m*n];
  82. int number,cnt,index=0;
  83. for(int i=0; i<m; i++) {
  84. for(int j=0; j<n; j++) {
  85. number=a[i][j];
  86. if(number!=0) {
  87. cnt=solve(number,i,j,0);
  88. res.push_back(cnt);
  89. data[index++]={i,j};
  90. }
  91. }
  92. }
  93.  
  94. int mx=-1;
  95. int temp;
  96. int highest;
  97. for(int i=0;i<index; i++) {
  98. temp=res[i];
  99. // mx=max(mx,temp);
  100. if(temp>mx) {
  101. mx=temp;
  102. highest=i;
  103. }
  104. }
  105. int b=data[highest].first;
  106. int k=data[highest].second;
  107. char number2=s[b][k];
  108.  
  109. solve2(b,k,number2);
  110.  
  111. swp();
  112.  
  113. for(int i=0; i<m; i++) {
  114. for(int j=0; j<n; j++) {
  115. cout << s[i][j] << " ";
  116. }
  117. cout << endl;
  118. }
  119. }
Success #stdin #stdout 0.01s 5308KB
stdin
4 7
3 3 4 2 4 3 5
2 1 1 1 3 5 5
3 1 4 1 1 4 5
3 3 4 3 3 1 5
stdout
3 . . . . 3 5 
2 3 4 2 4 5 5 
3 . 4 . 3 4 5 
3 3 4 3 3 1 5