如何从结构中传递STL参数以用于BFS中的下一步?

时间:2017-09-10 09:21:40

标签: stl breadth-first-search path-finding knights-tour

您好,这是代码&#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;
}

0 个答案:

没有答案