简单题:深度优先搜索
先找到起始位置,然后向四周搜索,注意慎用mem相关操作
#include<iostream>
#include<cstdio>
#include<cstring>
#include<memory>
#include<queue>
#include<algorithm>
using namespace std;
///
char maze[35][85];
char quiz[35][85];
int xd[] = { -1, -1, 0, 1, 1, 1, 0, -1};
int yd[] = { 0, 1, 1, 1, 0, -1, -1, -1};
int starty, startx;
int dr[] = { 0, -2, 0, 2};
int dc[] = {-2, 0, 2, 0};
int ddr[] = { 0, -4, 0, 4};
int ddc[] = { -4, 0, 4, 0};
int row, col;
void dfs(int starty, int startx)
{
int i, j;
quiz[starty][startx] = '#';
// printf("%s\n", quiz[starty]);
for (i = 0; i < 8; i++)
quiz[starty + xd[i]][startx + yd[i]] = '#';
for (i = 0; i < 4; i++)
{
if ((starty + dr[i] < row) && (starty + dr[i] >= 0) && (startx + dc[i] >= 0))
{
if ((startx + dc[i] < strlen(quiz[starty + dr[i]])) && (quiz[starty + dr[i]][startx + dc[i]] == ' '))
{
quiz[starty + dr[i]][startx + dc[i]] = '#';
dfs(starty + ddr[i], startx + ddc[i]);
}
}
}
}
int main()
{
///
int i, j;
int nCases;
bool flag;
scanf("%d", &nCases);
getchar();
while (nCases--)
{
for (i = 0; i < 35; i++)
{
for (j = 0; j < 85; j++)
{
maze[i][j] = '\0';
}
}
for (i = 0; i < 35; i++)
{
for (j = 0; j < 85; j++)
{
quiz[i][j] = '\0';
}
}
flag = false;
i = 0;
while (1)
{
gets(maze[i]);
if (maze[i][0] == '_')
break;
i++;
}
row = i;
for (i = 0; i < 35; i++)
{
for (j = 0; j < 85; j++)
{
quiz[i][j] = maze[i][j];
}
}
for (i = 0; i < row; i++)
{
j = 0;
while (maze[i][j] != '\0')
{
if (maze[i][j] == '*')
{
starty = i;
startx = j;
flag = true;
break;
}
j++;
}
if (flag)
break;
}
dfs(starty, startx);
for (i = 0; i <= row; i++)
{
printf("%s\n", quiz[i]);
}
}
///
return 0;
}