BFS求助!!!(0分)
查看原帖
BFS求助!!!(0分)
741732
small_Dongpo楼主2023/6/9 07:22

我的代码:

#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) 哪位大佬能帮我把时间复杂度缩小一点(关注)

2023/6/9 07:22
加载中...