只有10分求助

P1443 马的遍历

ans[x][y] = d + 1; q.push({ x, y });应该在循环内
by Creative_sad_yosgic @ 2023-01-17 13:31:18


@[Hayaizo](/user/792359) $int x = ux + dx[i], y = uy + dy[i];$ 应该是这样吧
by Tobiichi_Origami @ 2023-01-17 13:32:12


@[Hayaizo](/user/792359) ```cpp #include <iostream> #include <cstring> #include <queue> using namespace std; typedef pair<int, int>PI; typedef pair<int,PI>PII; const int N = 310; int ans[N][N]; int n, m, x, y; const int dx[8] = {-1,-2,-2,-1,1,2,2,1}; const int dy[8] = { 2,1,-1,-2,2,1,-1,-2 }; queue<PII>q; void Bfs() { while (!q.empty()) { PII u = q.front(); int ux = u.first, uy = u.second.first, ut=u.second.second; q.pop(); for (int i = 0; i < 8; i++) { int x = ux + dx[i], y = uy + dy[i]; if (x < 1 || x > n || y < 1 || y > m || ut+1>=ans[x][y]) { continue;//越界或者已经走过了该位置 } ans[x][y] = ut + 1; q.push({ x, {y, ut+1} }); //cout<<ut+1<<" "<<x<<" "<<y<<endl; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if(ans[i][j]==0x3f3f3f3f){ ans[i][j]=-1; } printf("%-5d", ans[i][j]); } puts(""); } } int main(void) { scanf("%d %d %d %d", &n, &m, &x, &y); memset(ans, 0x3f, sizeof(ans)); //初始化为-1,表示没有访问 ans[x][y] = 0; //初始位置距离为0 q.push({x,{y,0}}); Bfs(); return 0; } ```
by Eirin_Yagokoro @ 2023-01-17 13:35:10


@[Tobiichi_Origami](/user/681351) 谢谢佬
by Hayaizo @ 2023-01-17 13:36:16


@[__dest__ruct__or__](/user/592238) 谢谢大佬
by Hayaizo @ 2023-01-17 13:36:50


|