这是我的代码
#include <bits/stdc++.h>
using namespace std;
char arr[105][105];
bool check[105][105];
int n;
int dir[8][2] = {{-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1}};
map<char, int> mp = {{'y', 0}, {'i', 1}, {'z', 2}, {'h', 3}, {'o', 4}, {'n', 5}, {'g', 6}};
bool dfs(int x, int y, int d)
{
if (arr[x][y] == 'g')
{
check[x][y] = true;
return true;
}
int nx = x + dir[d][0];
int ny = y + dir[d][1];
if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && mp.find(arr[nx][ny]) != mp.end())
{
if (mp[arr[nx][ny]] == mp[arr[x][y]] + 1)
{
if (dfs(nx, ny, d))
{
check[x][y] = true;
return true;
}
}
}
return false;
}
int main()
{
scanf("%d", &n);
getchar();
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
scanf("%c", &arr[i][j]);
getchar();
}
memset(check, false, sizeof(check));
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (arr[i][j] == 'y')
{
for (int d = 0; d < 8; d++)
{
dfs(i, j, d);
}
}
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (check[i][j])
printf("%c", arr[i][j]);
else
printf("*");
}
printf("\n");
}
}
然后,样例用的是题目给的样例2,样例2在我的编译器上是完全可以过的,这个样例也是这道题第1个测试点,结果我把代码提交上去,五个全部WA?有没有大佬说说是不是洛谷读代码有啥问题?