C++ DFS和BFS工作不正常
你好,我对BFS和DFS有问题。这是我基于互联网上的算法实现的。问题是,在我的例子中,它只移动我开始时使用的顶点,而不改变剩余序列 作为邻接矩阵的图表示C++ DFS和BFS工作不正常,c++,depth-first-search,breadth-first-search,C++,Depth First Search,Breadth First Search,你好,我对BFS和DFS有问题。这是我基于互联网上的算法实现的。问题是,在我的例子中,它只移动我开始时使用的顶点,而不改变剩余序列 作为邻接矩阵的图表示 struct vertice { int index; double *arrOfWeights; }; struct Graph { int size; vertice *v; }; DFS算法: void tempDFS(Graph &g, int s, bool visited[]) {
struct vertice {
int index;
double *arrOfWeights;
};
struct Graph {
int size;
vertice *v;
};
DFS算法:
void tempDFS(Graph &g, int s, bool visited[]) {
visited[s] = true;
cout << s << ",";
int i;
for(i=0; i< g.size; i++)
if (!visited[i])
tempDFS(g, i, visited);
}
void DFS(Graph &g, int s) {
bool *visited = new bool[g.size];
for (int i = 0; i < g.size; i++)
visited[i] = false;
tempDFS(g, s, visited);
cout << endl;
}
void tempDFS(图形&g、整数s、布尔值[]){
已访问=正确;
cout解决此类问题的正确工具是您的调试器。在询问堆栈溢出问题之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该在问题中包含一个重现您的问题的示例,以及您在调试器中所做的观察。您有一个非常奇怪的图形-它有顶点,但没有边(或者更确切地说,你的算法就像每对顶点之间都有边一样工作)。邻接矩阵在哪里?它不在你展示的代码中。总之,“它只移动顶点”是什么意思?什么将顶点移动到哪里?在您显示的代码中,任何地方都没有移动。我猜graph有一个vertice数组,vertice有一个权重数组,所以每个vertice到其他vertice(包括它本身)都有一个权重/距离/边。容易出错的原始数组有错误--请尝试std::vector。给我们一个main,它初始化一个基本图形并实际执行搜索(并告诉我们它应该找到什么答案,以及它找到了什么答案)。此外,拼写也让我感到困扰--单数“顶点”复数“顶点”解决此类问题的正确工具是调试器。在询问堆栈溢出问题之前,您应该逐行检查代码。有关更多帮助,请阅读。至少,您应该在问题中包含一个重现您的问题的示例,以及您在调试器中所做的观察。您有一个非常奇怪的图形-它有顶点,但没有边(或者更确切地说,你的算法就像每对顶点之间都有一条边一样)。邻接矩阵在哪里?它不在你展示的代码中。总之,“它只移动顶点”是什么意思?什么将顶点移动到哪里?在您显示的代码中,任何地方都没有移动。我猜graph有一个vertice数组,vertice有一个权重数组,所以每个vertice到其他vertice(包括它本身)都有一个权重/距离/边。容易出错的原始数组有错误--请尝试std::vector。给我们一个main,它初始化一个基本图形并实际执行搜索(并告诉我们它应该找到什么答案,以及它找到了什么答案)。此外,拼写也让我感到困扰--单数“顶点”复数“顶点”
void BFS(Graph &g, int s) {
bool *visited = new bool[g.size];
for(int i = 0; i < g.size; i++)
visited[i] = false;
queue<int> q;
visited[s] = true;
q.push(s);
while(!q.empty()) {
s = q.front();
cout << s << ",";
q.pop();
for(int i=0; i<g.size; i++) {
if(!visited[i]) {
visited[i] = true;
q.push(i);
}
}
}
cout << endl;
}