所以我有一个实验室,使用邻接矩阵实现广度优先搜索和深度优先搜索。要搜索的图的顶点编号为0-(V-1),因此例如具有10个顶点的图将具有编号为0-9的顶点。每个顶点也都有一个值。
在我要给出的例子中,每个顶点的数量等于它的值(例如,顶点0的值为0,顶点1的值为1,等等)。我将每个顶点的值存储在一个数组中,其中position是顶点,而数组中的item是它的值,所以找到vertex 7的值看起来像:
value = matrix[7];
我应该编写一个程序,通过广度优先搜索找到一个特定值并报告它所找到的顶点,以及有多少"步骤"它找到了它。
我的程序在每个测试用例中找到了值,但问题是"步骤"不匹配。我认为问题必须在我的BFS算法本身内,但我无法找到它。
例如,我在下面的邻接矩阵中搜索值7,它位于顶点7:
0 1 1 0 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 0 0 1 1 0 0 0
0 0 0 0 0 0 0 1 1 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
有10个节点,编号为0-9,节点0连接到节点1和2,节点1连接到节点3和4,节点2连接到节点5和6,节点3连接到节点7 8,节点4连接到节点9。
如上所述"顶点"是顶点值的数组。 "基质"是邻接矩阵。 "访问"是一个bool数组,用于跟踪是否已访问过顶点。
我是"步行"带有deque容器的图表,我需要使用它。
这是我的BFS:
steps = 1;
int cur_v = 0;
int vertexFound = 0;
bool found = false;
bool *visited = new bool[V];
for (int i = 0; i < V; i++) {
visited[i] = false;
}
deque <int> q;
q.push_back(0);
visited[0] = true;
while (!q.empty()) {
if (found == false) {
steps++;
}
cur_v = q.front();
q.pop_front();
for (int n = 0; n < V; n++) {
if (matrix[cur_v][n] == 1) {
if (visited[n] == false) {
if (vertices[n] == search) {
vertexFound = n;
found = true;
}
visited[n] = true;
q.push_back(n);
}
}
}
}
if (found == true) {
cout << steps << endl;
}
我正在搜索的值是&#34; 7&#34;,位于顶点7.我应该花7步才能到达那里,但我的程序说它需要5个。
我遇到的另一个问题是,当我给出程序输入时,它应该使它在一个图形中搜索值8,其中8个顶点从值0-7开始,它告诉我它在顶点找到了值0步9步。
非常感谢任何帮助!
答案 0 :(得分:0)
在您第一次找到您要查找的内容后,您不应该更新vertexFound
。 (事实上,你可以立即停止搜索。)