编译“| 75 |错误:在实现bfs时无法将'std :: vector <int>'转换为'int'”时出错

时间:2017-07-08 16:30:03

标签: c++ graph-theory breadth-first-search

我正在为图形实现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]);
    }
}

1 个答案:

答案 0 :(得分:1)

在您当前的代码中,v是一个包含vector的大小为10的数组。但是,start是一个int,因此在尝试将一个错误分配给另一个时出错并不奇怪。

我相信您希望v成为intvector int的数组。在这种情况下,您只需要正确声明vint v[10]vector<int> v(10)

这是一般语法:如果您要声明具有已知大小的向量,则必须将其放在()中,而不是[]中。请注意,您还可以通过编写vector<int> v(10, 0)来填充带有一些初始值(例如零)的向量。

如果你错了,并且想要将图表存储为vector的{​​{1}},那么你可以写vector