撒花,终于。。。完成了。。
虽然时间用得很长QAQ就当练习了
#include <iostream>
#include <string>
using namespace std;
char road[30][81];
int dr[2];
int r[2][4] = {{1,0,-1,0},{0,1,0,-1}};
void dfs(int a,int b)
{
for(int m = 0;m < 4;m++)
if(road[a+r[0][m]][b+r[1][m]] == ' ')
{
road[a+r[0][m]][b+r[1][m]] = '#';
dfs(a+r[0][m],b+r[1][m]);
}
}
void bfs(int a,int b)
{
int Queuex[2400],Queuey[2400];
int rear = 0,fron = -1;
while(rear != fron)
{
Queuex[rear] = a;
Queuey[rear] = b;
while(rear != fron)
{
fron ++;
for(int m = 0;m < 4;m++)
if(road[Queuex[fron]+r[0][m]][Queuey[fron]+r[1][m]] == ' ')
{
road[Queuex[fron]+r[0][m]][Queuey[fron]+r[1][m]] = '#';
Queuex[++rear] = Queuex[fron]+r[0][m];
Queuey[rear] = Queuey[fron]+r[1][m];
}
}
}
}
int main()
{
int num;
cin >> num;
cin.get();
while(num--)
{
int flag = 0;
for(int m =0;m < 30;m++)
{
for(int u =0;u < 80;u++)
{
road[m][u] = cin.get();
if(road[m][u] == '*')
{
flag = 1;
road[m][u] = '#';
dr[0] = m;
dr[1] = u;
}
if(road[m][u] == '\n')
break;
}
if(road[m][0] == '_')
break;
}
if(flag == 1)
//dfs(dr[0],dr[1]);
bfs(dr[0],dr[1]);
flag = 0;
for(int m =0;m < 30;m++)
{
for(int u =0;u < 80;u++)
{
if(road[m][u] == '\n')
break;
cout << road[m][u];
}
cout << endl;
if(road[m][0] == '_')
break;
}
}
return 0;
}