为什么本地输出和Luogu上的不一样(82求助)
查看原帖
为什么本地输出和Luogu上的不一样(82求助)
248302
d0j1a_1701楼主2021/7/5 23:01
#include <unordered_map>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#include <queue>
using namespace std;
const int dx[5] = {0, 0, 1, 0, -1}, dy[5] = {0, 1, 0, -1, 0}, inf = 0x3f3f3f3f;
int n, m;
char arr[310][310];
bool vis[310][310];
struct State {
    int x, y, t;
};
unordered_multimap<char, pair<int, int> > portals;
pair<int, int> start, finish;
queue<State> q;
inline pair<int, int> getAnother(char p, pair<int, int> pos) {
    auto range = portals.equal_range(p);
    auto first = range.first, second = range.first;
    advance(second, 1);
    if(first->second == pos)  return second->second;
    return first->second;
}
int main() {
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
        for(int j = 1; j <= m; j++) {
            cin >> arr[i][j];
            if(arr[i][j] == '@') start = {i, j};
            else if(arr[i][j] == '=')    finish = {i, j};
            else if(isalpha(arr[i][j]))    portals.insert({arr[i][j], {i, j}});
        }
    q.push({start.first, start.second, 0});
    while(q.size()) {
        auto cur = q.front();
        q.pop();
        if(vis[cur.x][cur.y])   continue;
        vis[cur.x][cur.y] = true;
        cout << "cur: " << cur.x << ' ' << cur.y << ' ' << cur.t << endl;
        if(cur.x == finish.first && cur.y == finish.second) {
            cout << cur.t << endl;
            break;
        }
        if(isalpha(arr[cur.x][cur.y])) {
            auto pos = getAnother(arr[cur.x][cur.y], {cur.x, cur.y});
            cur.x = pos.first, cur.y = pos.second;
        }
        for(int i = 1; i <= 4; i++) {
            int xx = cur.x + dx[i], yy = cur.y + dy[i];
            if(xx < 1 || yy < 1 || xx > n || xx > m || vis[xx][yy] || arr[xx][yy] == '#')  continue;
            q.push({xx, yy, cur.t + 1});
        }
    }

    system("pause");
    return 0;
}
/*
5 5
##=##
...##
#A###
..#A.
.@###
*/

数据

19 24
########################
#@..A.#BR#RF#E...#.....#
#...#.##.##.####.#.###.#
#####BA#.##.#Q.#.#.#...#
#D...C#W.#FQ####...#.#.#
####C########D.E####.#.#
#...#...#....#W#...#.#.#
#.#.#.#.#.#...#..#.#.#.#
#.#...#...#..T#..#...#.#
#N##############.#####.#
#X#X#M#J#V###V.#.......#
#Z#Y#Y#M#J#########.####
#..#.#.#.##......#.....#
#.#...N#....#...#......#
#.#.####.####..#.......#
#.#......#....#........#
#.########.###.......###
#....................#T=
########################

本地输出 112(正确答案)

洛谷IDE/评测机 输出110 (???)

初步DEBUG发现bfs在枚举(16,8,77)和(11,10,78)时和luogu不一样

求调!!!

2021/7/5 23:01
加载中...