社区讨论
53分求调
P1825[USACO11OPEN] Corn Maze S参与者 1已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhji336x
- 此快照首次捕获于
- 2025/11/04 02:55 4 个月前
- 此快照最后确认于
- 2025/11/04 02:55 4 个月前
在线等,非常急
代码如下:
CPP#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
const int N = 400;
char a[N][N];
int ans[N][N], map[N][N], n, m, x, y, fx, fy;
struct sss{
int x, y;
};
queue<sss> q;
int use[4][2] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}};
void findf(char c, int *x, int *y){
for (int i = 1; i <= n; i ++ ){
for (int j = 1; j <= m; j ++ ){
if (*x != i && *y != j && a[i][j] == c){
*x = i;
*y = j;
return ;
}
}
}
return ;
}
int main(){
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] == '@'){
x = i, y = j;
continue;
}
}
}
memset(map, -1, sizeof(map));
map[x][y] = 0;
q.push({x, y});
while (!q.empty()){
sss tmp = q.front();
q.pop();
int d = ans[tmp.x][tmp.y];
if (a[tmp.x][tmp.y] == '='){
cout << d;
return 0;
}
for (int i = 0; i < 4; i ++ ){
int ux = tmp.x + use[i][0];
int uy = tmp.y + use[i][1];
if (map[ux][uy] == -1 && a[ux][uy] != '#'){
ans[ux][uy] = d + 1;
map[ux][uy] = 0;
if (a[ux][uy] >= 'A' && a[ux][uy] <= 'Z'){
findf(a[ux][uy], &ux, &uy);
}
ans[ux][uy] = d + 1;
q.push({ux, uy});
}
}
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...