广度优先搜索返回不正确的金额

时间:2015-12-09 07:56:35

标签: c++ algorithm breadth-first-search

我对广度优先搜索的实现没有为最短步骤返回正确的数字。我似乎无法弄清楚为什么。起初我认为这与我使用步数计数器的方式有关,但这似乎对我而言。任何见解将不胜感激:

 struct vertices{
int value;
int parent;
int visited;
int distance;
};

 int BFS(vertices *v, int **adj_matrix, int num_nodes)
{

int target;
vertices current;
bool found = false;
int steps = 0;
int size = 0;

cin >> target >> num_nodes;
adj_matrix [num_nodes][num_nodes];
deque<vertices> q;

// Mark all the vertices as not visited
for(int i = 0; i < num_nodes; i++){
    v[i].visited = 0;
    v[i].distance = 0;
    v[i].parent = 0;
}

v[0].visited = 1;
v[0].distance = 0;
q.push_front(v[0]);

while(!q.empty()){
    current = q.front();
    q.pop_front();

    for(int i=0; i<num_nodes; i++){
        if(adj_matrix[current.value][i] ==1){
            if(v[i].visited == 0){
                 steps++;
                v[i].visited = 1;
                v[i].distance = current.distance + 1;
                v[i].parent = current.value;
                q.push_back(v[i]);

            }

            if(current.value == target){
                break;
            }
        }
    }

}

return steps;
}

2 个答案:

答案 0 :(得分:1)

@Autowired

*他们应该在访问目标节点后立即返回目标节点的距离。如果BFS没有给你正确答案,请检查你的adj。如果您的目标节点可以访问,则使用矩阵。

答案 1 :(得分:0)

我不明白为什么你算var appController: TVApplicationController? 而不回steps。假设是相同的数字,不是吗?您在评论中说,当您返回v[target].distance时,您获得0.您确定保留了正确的值,或者存在一些问题

v[target].distance

或者,如果你的目标距离真的是0,那意味着你永远不会到达终点,这就是你的v[i].visited = 1; v[i].distance = current.distance + 1; v[i].parent = current.value; 不正确的原因。 尝试打印一些中间值