我的代码:
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int a[105][105], m, n, money[105][105];
struct Grid
{
int x, y, m;
};
void bfs()
{
queue<Grid> q;
Grid x = {1, 1, 1};
q.push(x);
while (!q.empty())
{
x = q.front();
int ax[5] = {0, 0, 0, 1, -1};
int ay[5] = {0, 1, -1, 0, 0};
for (int i = 1; i <= n; ++i)
{
Grid y = {x.x + ax[i], x.y + ay[i], 1};
if (a[y.x][y.y] == a[x.x][x.y] && (money[y.x][y.y] > money[x.x][x.y] || money[y.x][y.y] == -1))
{
money[y.x][y.y] = money[x.x][x.y];
q.push(y);
}
else if (a[y.x][y.y] == -1 && (money[y.x][y.y] > money[x.x][x.y] + 2 || money[y.x][y.y] == -1) && x.m == 1)
{
money[y.x][y.y] = money[x.x][x.y] + 2;
y.m = 0;
q.push(y);
}
else if (a[y.x][y.y] != -1 && a[y.x][y.y] != a[x.x][x.y] && (money[y.x][y.y] > money[x.x][x.y] + 1 || money[y.x][y.y] == -1))
{
money[y.x][y.y] = money[x.x][x.y] + 1;
q.push(y);
}
}
}
}
int main()
{
cin >> m >> n;
memset (a, -1, sizeof(a));
for (int i = 1; i <= n; ++i)
{
int x, y, c;
cin >> x >> y >> c;
a[x][y] = c;
}
money[1][1] = 0;
bfs();
cout << money[m][m];
return 0;
}
时间复杂度或许有点大(不是TLE就是RE) 哪位大佬能帮我把时间复杂度缩小一点(关注)