您好,这是代码&#34;国际象棋骑士问题&#34;骑士的起点和终点 - 棋盘上的x,y。第一个问题是找到从源点到目标点的最短路径。我使用bfs算法来解决它并且它起作用,但后来我尝试修改算法以获得从s到d的完整路径。路径本身存储在&#34;节点&#34;结构体。我的问题是我无法将vector<pair<int,int>>
参数传递给bfs
q.push( {_x,_y, dist+1, path.push_back(make_pair(_x,_y)) } );
在这一行上,当我尝试将参数传递给下一个节点时,我有一个错误,但在删除了第三个参数&#34; path.push_back ...&#34;它有效 - 如何通过它?谢谢。
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<queue>
using namespace std;
struct node{
int x,y,dist;
vector<pair<int,int>> path;
bool operator==(const node& p)const{
return x == p.x && y == p.y;
}
bool operator<(const node& p)const{
return x < p.x ||(x == p.x && y < p.y);
}
};
bool is_ok(int x, int y){
return (x > 0 && y > 0 && x < 8 && y < 8);
}
pair<int, vector<pair<int,int>>> bfs(node s, node d){
queue<node> q;
q.push(s);
map<node, bool> visited;
vector<int> col = {1,1,2,2,-2,-2,-1,-1};
vector<int> row = {2,-2,1,-1,1,-1,2,-2};
while(!q.empty()){
node u = q.front(); q.pop();
int dist = u.dist;
vector<pair<int,int>> path(u.path.begin(), u.path.end());
if(u.x = d.x && u.y == d.y)
return make_pair(dist, path);
if(!visited.count(u)){
visited[u] = true;
for(int i = 0; i < 8; i ++){
int _x = u.x + col[i];
int _y = u.y + row[i];
if (is_ok(_x,_y))
q.push( {_x,_y, dist+1, path.push_back(make_pair(_x,_y)) } );
}
}
}
}
int main(){
return 0;
}