搜索每一个点;
联系flood fill;
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N=55;
int t,n,m;
char g[N][N];
void dfs(int x,int y)
{
if(x+1>n||g[x+1][y]=='o'||g[x+1][y]=='*')
// 一般三个条件:出界没有,走过了没,能不能走;
return ;
swap(g[x][y],g[x+1][y]);
dfs(x+1,y);
}
void solve ()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>g[i];
for(int i=n;i>=1;i--)// 倒着搜是因为 dfs中g[x+1][y]=='*'就return了;
//如果顺着搜就不满足竖着 “**.”这种情况;
{
for(int j=0;j<m;j++)
{
if(g[i][j]=='*')
{
dfs(i,j);
}
}
}
for(int i=1;i<=n;i++)
{
for(int j=0;j<m;j++)
{
putchar(g[i][j]);
}
cout<<endl;
}
}
int main()
{
cin>>t ;
while(t--)
{
solve();
}
return 0;
}