我对广度优先搜索的实现没有为最短步骤返回正确的数字。我似乎无法弄清楚为什么。起初我认为这与我使用步数计数器的方式有关,但这似乎对我而言。任何见解将不胜感激:
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;
}
答案 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;
不正确的原因。
尝试打印一些中间值