• Source
    1. #include<bits/stdc++.h>
    2.  
    3. using namespace std;
    4.  
    5.  
    6. char grid[103][103],ch;
    7.  
    8. bool color[103][103];
    9.  
    10. int x,y,highC,highR;
    11.  
    12.  
    13. void dfs(int i,int j)
    14. {
    15. if(i<0||j<0||i>=highR||grid[i][j]==ch||grid[i][j]=='#')
    16. {
    17. return;
    18. }
    19.  
    20. if(grid[i][j]==' ' && color[i][j]==false)
    21. {
    22. if(grid[i+1][j]==ch)
    23. {
    24. grid[i][j] = '#';
    25. }
    26. else if(grid[i-1][j]==ch)
    27. {
    28. grid[i][j] = '#';
    29. }
    30. else if(grid[i][j+1]==ch)
    31. {
    32. grid[i][j] = '#';
    33. }
    34. else if(grid[i][j-1]==ch)
    35. {
    36. grid[i][j] = '#';
    37. }
    38.  
    39. color[i][j] = true;
    40.  
    41. dfs(i+1,j);
    42. dfs(i-1,j);
    43. dfs(i,j+1);
    44. dfs(i,j-1);
    45. }
    46. }
    47.  
    48.  
    49. int main()
    50. {
    51.  
    52. int n,i,j,k,len;
    53.  
    54. scanf("%d",&n);
    55. getchar();
    56.  
    57. while(n--)
    58. {
    59.  
    60. highC=-1,i=-1;
    61.  
    62. while(gets(grid[++i]))
    63. {
    64. len = strlen(grid[i]);
    65. highC = max(highC,len);
    66.  
    67. if(grid[i][0]=='_')
    68. break;
    69.  
    70. }
    71.  
    72. bool tag = false;
    73.  
    74. for(k=0; k<i; k++)
    75. {
    76. for(j=0; grid[k][j]!='\0'; j++)
    77. {
    78. if(grid[k][j]!='*' && grid[k][j]!='_' && grid[k][j]!=' ' && grid[k][j]!='#')
    79. {
    80. ch = grid[k][j];
    81. tag = true;
    82. break;
    83. }
    84. }
    85. if(tag)break;
    86. }
    87.  
    88. for(k=0;k<i;k++)
    89. {
    90. for(j=0;j<=highC+2;j++)
    91. {
    92. if(j==(highC+2))
    93. grid[k][j]='\0';
    94.  
    95. else if(grid[k][j]!=ch && grid[k][j]!='_' && grid[k][j]!='*')
    96. grid[k][j] = ' ';
    97. }
    98. }
    99.  
    100. highR = i;
    101.  
    102. tag = false;
    103.  
    104. for(k=0; k<i; k++)
    105. {
    106. for(j=0; grid[k][j]!='\0'; j++)
    107. {
    108. if(grid[k][j]=='*')
    109. {
    110. grid[k][j] = ' ';
    111.  
    112. dfs(k,j);
    113. tag = true;
    114. break;
    115. }
    116. }
    117. if(tag)break;
    118. }
    119.  
    120. for(k=0; k<i; k++)
    121. {
    122. for(j=(highC+2); j>=0; j--)
    123. {
    124. if(grid[k][j]==ch || grid[k][j]=='#')
    125. {
    126. break;
    127. }
    128. else
    129. grid[k][j]='\0';
    130. }
    131. }
    132.  
    133. for(k=0; k<=i; k++)
    134. {
    135. puts(grid[k]);
    136. }
    137.  
    138. memset(grid,'\0',sizeof grid);
    139.  
    140. memset(color,false,sizeof color);
    141. }
    142.  
    143. return 0;
    144. }
    145.