yuAriellexi 2018-07-31 06:46 采纳率: 100%

# 这个BFS路径搜索，有关iterator, struct

``````#include <iostream>
#include <cstdio>
#include <algorithm>
#include <stdio.h>
#include <queue>
#include  <map>
#include <iterator>
#include <string>
#include <vector>
using std::cin;
using std::cout;
using std::endl;
using std::queue;
using std::vector;
#define MaxVex 10000000

struct edge
{
int to; //这条管道的终点
//  int Pno;这条管道的编号
int ifV;//出发点是否是阀门， 1：是； 0：不是
};
vector<edge>::iterator it;//定义迭代器it

vector <edge> Graph[MaxVex];//G[count]是一个vector, vecotr里面包含管段信息，G[count]是出发点
void BFS(vector <edge>, int);

void BFS(vector <edge> G, int v)//graph与搜索源节点v
{
int flag[MaxVex] = {0};//所有节点均没有被访问过
queue <int> Q; //与该节点相连接，并且没有被访问过的节点y
vector<edge>::iterator it;

Q.push(v);

while (!Q.empty())
{
v = Q.front();
Q.pop();
for (it = G[v].begin(); it != G[v].end(); it++)//使用迭代器遍历所有G[v]的edge
{
//G[v] vector of edge
if (flag[(*it).to] == 0 && (*it).ifV == 0)
{
cout << "与该点相连的节点编号是 " << (*it).to << endl;
flag[(*it).to] = 1;
Q.push((*it).to);
}
}
}
}

int main()
{
int n, m;//n个顶点，m组数据
scanf("%d%d", &n, &m);
int vex;
while(m--)
{
edge e;
scanf("%d%d%d", &vex, &e.to, &e.ifV);
Graph[vex].push_back(e);//G[1]即表格中第一个点的信息
}
BFS(Graph, 6);
return 0;
}

``````

boomAnalysis.cpp:43:18: error: no member named 'begin' in 'edge'
for (it = G[v].begin(); it != G[v].end(); it++)//使用迭...
~~~~ ^
boomAnalysis.cpp:43:38: error: no member named 'end' in 'edge'
for (it = G[v].begin(); it != G[v].end(); it++)//使用迭...
~~~~ ^
boomAnalysis.cpp:73:2: error: no matching function for call to 'BFS'
BFS(Graph, 6);
^~~
boomAnalysis.cpp:31:6: note: candidate function not viable: no known conversion
from 'vector [10000000]' to 'vector' for 1st argument
void BFS(vector G, int v)//graph与搜索源节点v

• 写回答

#### 1条回答默认 最新

• threenewbee 2018-07-31 16:06
关注

不涉及算法，从语法的角度说

edge不是迭代器，而 1`ector <edge>` 才是

for (it = G[v].begin(); it != G[v].end(); it++)
应该是
for (it = G.begin(); it != G.end(); it++)

`void BFS(vector <edge> G, int v)`
需要的G是vector而不是vector 数组
BFS(Graph, 6);
传入的是整个vector构成的数组，而不是单个`vector<edge>`

综合以上两点，我估计你对参数G的认识有问题，你函数内一直把它当作`vector<edge>`构成的数组（从edge的角度看，就是二维数组了），但是调用的时候又当成单个vector

本回答被题主选为最佳回答 , 对您是否有帮助呢?
评论

#### 悬赏问题

• ¥15 聚类分析或者python进行数据分析
• ¥15 逻辑谓词和消解原理的运用
• ¥15 三菱伺服电机按启动按钮有使能但不动作
• ¥15 js，页面2返回页面1时定位进入的设备
• ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
• ¥15 （希望可以解决问题）ma和mb文件无法正常打开，打开后是空白，但是有正常内存占用，但可以在打开Maya应用程序后打开场景ma和mb格式。
• ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
• ¥20 腾讯企业邮箱邮件可以恢复么
• ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗？
• ¥15 错误 LNK2001 无法解析的外部符号