警示!自己一开始WA最后一个点

P1825 [USACO11OPEN] Corn Maze S

@[xuhrrr](/user/113001) ???我也是WA了最后一个点,能讲讲怎么改吗?
by Mr_user @ 2024-01-21 18:17:39


@[Mr_user](/user/1255776) 对于我的代码的话就是把每个node的结构体里面再加一个ans来记录每一步的答案,然后主要的改变是在处理bfs模板内的A-Z的传送门的时候不用赋值改变ans,直接用pop出来的那一个元素的ans即可 **第一处改变** ```cpp struct node{ int x,y,ans; }; queue<node>q; ``` **第二处改变** ```cpp while(!q.empty()){ node tmp = q.front(); q.pop(); int ux = tmp.x; int uy = tmp.y; if(map[ux][uy] == '='){ cout << tmp.ans << endl; break; } if(map[ux][uy] >= 'A' && map[ux][uy] <= 'Z'){ int temp = map[ux][uy] - 'A'; if(a[temp].x == ux && a[temp].y == uy){ ux = a[temp]._x; uy = a[temp]._y; //ans[ux][uy] = ans[a[temp].x][a[temp].y]; } else{ ux = a[temp].x; uy = a[temp].y; //ans[ux][uy] = ans[a[temp]._x][a[temp]._y]; } } //cout << ux << " " << uy << endl; for(int k = 0 ; k < 4 ; ++k){ int nx = ux + dir[k][0]; int ny = uy + dir[k][1]; if(nx <= 0 || nx > n || ny <= 0 || ny > m || vis[nx][ny] != 0){ continue; } vis[nx][ny] = 1; node newnode = {nx,ny,tmp.ans + 1}; q.push(newnode); } } ```
by xuhrrr @ 2024-01-22 12:47:57


|