我正在为图形实现bfs(广度优先搜索),但是当我将向量的起始值传递给整数时,我得到一个错误,因为dfs函数要执行,就像我传递的dfs函数一样向量的来源,即向量的第一个元素。 错误位于将start声明为v [i] 的行上 这是完整的代码
#include <iostream>
#include <vector>
#include <queue>
#include <stdio.h>
using namespace std;
vector<int> v[10];
bool visited[10];
int level[10];
int a = 0;
int arr[10];
void dfs(int s) //function should run only one time
{
queue<int> q;
q.push(s);
visited[s] = true;
level[s] = 0;
while (!q.empty())
{
int p = q.front();
arr[a] = p;
a++;
q.pop();
for (int i = 0; i < v[p].size(); i++)
{
if (visited[v[p][i]] == false) {
level[v[p][i]] = level[p] + 1;
q.push(v[p][i]);
visited[v[p][i]] = true;
}
}
}
}
int main()
{
char c;
int start; // starting element of the vector
int i = 0; // for keeping track of the parent
int countt = 0; // keep track of the no of parents
bool check;
printf("Child or Parent ?");
scanf("%c", &c);
while (countt <= 10) {
if (c == 'c') {
check = true;
int j = 0;
while (check) {
// to keep the track of the child;
scanf("%d", &v[i][j]);
j++;
}
}
if (c == 'p')
{
scanf("%d", &v[i]);
if (i == 0)
{
start = v[i];
}
i++;
countt++;
}
}
printf(" Vector input completed");
dfs(start);
printf("DFS completed, printing the dfs now ");
for (int g = 0; g <= 10; g++)
{
printf("%d", &arr[g]);
}
}
答案 0 :(得分:1)
在您当前的代码中,v
是一个包含vector
的大小为10的数组。但是,start
是一个int
,因此在尝试将一个错误分配给另一个时出错并不奇怪。
我相信您希望v
成为int
或vector
int
的数组。在这种情况下,您只需要正确声明v
:int v[10]
或vector<int> v(10)
。
这是一般语法:如果您要声明具有已知大小的向量,则必须将其放在()
中,而不是[]
中。请注意,您还可以通过编写vector<int> v(10, 0)
来填充带有一些初始值(例如零)的向量。
如果你错了,并且想要将图表存储为vector
的{{1}},那么你可以写vector
。