蒟蒻错了一个点,求助qwq!!!

P1825 [USACO11OPEN] Corn Maze S

那个 $freopen$ 是后来调代码的时候加上的,不要在意 qwq
by Berlin_Jacor @ 2020-06-16 19:32:26


*码风出 $bug$ 是因为 $2Tabsize$ 空格缩进被 $luogu$ 强制转化为 $6Tabsize$ $tab$ 缩进,勿喷qwq
by Berlin_Jacor @ 2020-06-16 19:44:18


刚发讨论就被机房神仙调出来了!!! 在这里跟大家分享一下 就是说当传送过去以后,可能再一次被传送过去的字母旁边的点覆盖(重复入队)导致比答案多1。
by Berlin_Jacor @ 2020-06-16 20:16:58


这是AC代码: ```cpp #include <bits/stdc++.h> using namespace std; int n, m, dx[] = {0, -1, 1, 0}, dy[] = {1, 0, 0, -1}; char a[305][305]; int dis[305][305]; int visx[305], visy[305], px[305][305], py[305][305]; bool v[100], vis[305][305];//传送回来的时候和dis不一样,不能两个都标记啊,阿sir queue<pair<int,int> >q; int main() { ios::sync_with_stdio(0); cin.tie(NULL),cout.tie(NULL); cin>>n>>m; for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) { cin>>a[i][j]; if(a[i][j] == '=') { q.push(make_pair(i,j)); vis[i][j] = 1; } if(a[i][j] >= 'A' && a[i][j] <= 'Z') if(v[a[i][j] - 'A']) { px[i][j] = visx[a[i][j] - 'A'], py[i][j] = visy[a[i][j] - 'A'], px[visx[a[i][j] - 'A']][visy[a[i][j] - 'A']] = i, py[visx[a[i][j] - 'A']][visy[a[i][j] - 'A']] = j; } else v[a[i][j] - 'A'] = 1, visx[a[i][j] - 'A'] = i, visy[a[i][j] - 'A'] = j; } while(q.size()) { for(int i = 0; i < 4; ++i) { int x=q.front().first + dx[i], y=q.front().second + dy[i]; if(vis[x][y])continue; vis[x][y] = 1; if(a[x][y] == '#')continue; if(x < 1 || y < 1 || x > n || y > m)continue; if(a[x][y] >= 'A' && a[x][y] <= 'Z') {//存在重复标记字母位置的dis并重复入队导致dis多1!!! dis[px[x][y]][py[x][y]] = dis[q.front().first][q.front().second] + 1; q.push(make_pair(px[x][y], py[x][y])); } else { dis[x][y] = dis[q.front().first][q.front().second] + 1; if(a[x][y] == '@'){cout<<dis[x][y];return 0;} else q.push(make_pair(x, y)); } } q.pop(); } } ```
by Berlin_Jacor @ 2020-06-16 20:17:57


orz%%%
by uliahradri @ 2020-06-16 21:45:00


@[玄离の小黑](/user/221610) 那个,楼主的意思是如果从传送门a1到a2之后可以一步不走再从a2到a1吗
by 仙女杰瑞 @ 2020-08-24 06:05:34


@[仙女杰瑞](/user/277682) 不是的,我的意思是我的代码有锅,存在一种可能,a2入队后再一次被附近点的step更新时覆盖。
by Berlin_Jacor @ 2020-08-24 15:48:57


@[枫楠](/user/221610) 我也是没注意到这个点,感谢遇见
by lyu201909250425 @ 2020-10-01 12:22:12


|