确实无法弄清楚如何修复我的代码。我知道有明显的错误,因为它没有运行,但我不确定它们到底是什么,或者如何去修复它们。任何帮助/见解将非常感激。谢谢!!
struct vertices
{
int value;
int parent;
int visited;
int distance;
};
int BFS(vertices *v, int **adj_matrix, int num_nodes)
{
int target;
int cur_v = 0;
bool found = false;
int steps = 0;
cin >> target >> num_nodes;
adj_matrix [num_nodes][num_nodes];
deque<int> q;
for(int i = 0; i < num_nodes; i++)
{
v[i].visited = 0;
v[i].distance = INFINITY;
v[i].parent = 0;
v[1].visited = 1;
v[i].distance = 0;
q.push_front(v[1].value);
while(!q.empty())
{
cur_v = q.front();
q.pop_back();
v[cur_v].visited = 1;
for(int n=0; n< num_nodes; n++)
{
if(adj_matrix[cur_v][i] == n)
{
if(v[n].visited == 0)
{
v[n].visited = 1;
v[n].distance = ((v[cur_v].distance)+1);
v[n].parent = cur_v;
q.push_front(v[n].value);
steps ++;
}
}
}
}
}
return steps;
}
int main()
{
int target;
int num_nodes;
cin >> target;
cin >> num_nodes;
vertices *v = new vertices[num_nodes];
int **adj_matrix [num_nodes][num_nodes];
for(int i=0; i < num_nodes; ++i)
{
int node;
int value;
cin >> node >> value;
int num_edges;
cin >> num_edges;
for(int j=0; j<num_edges;++j)
{
int other_node;
cin >> other_node;
**adj_matrix[node][other_node] = 1;
**adj_matrix[other_node][node] = 1;
}
}
}
答案 0 :(得分:0)
第一个明显的错误是你使用了错误的数据 结构体。当你实现像matrix这样的已知概念时, BFS,你需要花费大量的时间来思考如何 实现输入,输出,算法的数据结构。
有些人喜欢使用std::vector<std::vector<int>>
作为矩阵。我几乎总是使用std::vector<int>
来表示矩阵数据。
第二个错误是您变异算法。那件事不是BFS。起初并不明显。
第三个明显的错误是编码风格。你没有做这么糟糕的工作,因为顶点结构是自我解释的
cur_v
的所有实例,以确认它代表 当前顶点 。 n
作为计数器并不是一个好主意。