BFS算法
题目解题思路代码#include iostream #include queue #include cstring using namespace std; typedef pairint,int PII; const int N410; int n,m,x,y; int dist[N][N]; // 骑士8个移动方向 int dx[]{1,2,2,1,-1,-2,-2,-1}; int dy[]{2,1,-1,-2,-2,-1,1,2}; void bfs() { memset(dist,-1,sizeof(dist)); // 初始化距离为-1 queuePII q; q.push({x,y}); dist[x][y]0; // 起点距离为0 while(q.size()) { auto tq.front(); q.pop(); int it.first,jt.second; for(int k0;k8;k) { int nxidx[k],nyjdy[k]; // 检查是否在棋盘范围内且未被访问过 if(nx1nxnny1nymdist[nx][ny]-1) { dist[nx][ny]dist[i][j]1; // 更新距离 q.push({nx,ny}); } } } } int main() { cinnmxy; bfs(); // 按行列输出每行对应棋盘的一行 for(int i1;in;i) { for(int j1;jm;j) { coutdist[i][j] ; } coutendl; } return 0; }