关于c++中iterator进行遍历与普通的for循环进行遍历的疑问
vector<int>vec[1111];voidDFS(inti){visit[i]=1;vector<int>::iteratorit;for(it=vec[i].b...
vector<int> vec[1111];
void DFS(int i)
{
visit[i]=1;
vector<int>::iterator it;
for(it=vec[i].begin();it!=vec[i].end();it++)
if(visit[*it]==0)
DFS(*it);
/*
for(int i=1;i<=P;i++)
{
if(visit[i]==0)
{
DFS(i);
}
}
}
这是我代码中抽出来的一部分,我使用iterator进行遍历时正确的,使用简单的for循环是错误的,
这里的visit[]数组是标记无向图中的顶点是否被访问过 P是顶点数目
我的这个dfs想实现的是 判断这个无向图是否为欧拉图(还未判断奇点) 展开
void DFS(int i)
{
visit[i]=1;
vector<int>::iterator it;
for(it=vec[i].begin();it!=vec[i].end();it++)
if(visit[*it]==0)
DFS(*it);
/*
for(int i=1;i<=P;i++)
{
if(visit[i]==0)
{
DFS(i);
}
}
}
这是我代码中抽出来的一部分,我使用iterator进行遍历时正确的,使用简单的for循环是错误的,
这里的visit[]数组是标记无向图中的顶点是否被访问过 P是顶点数目
我的这个dfs想实现的是 判断这个无向图是否为欧拉图(还未判断奇点) 展开
3个回答
展开全部
// 你的 i 变量是形参呀,这个 DFS 函数就是去遍历 vec[i] 这个数组的,修改如下
int nLen = vec[i].size();
for (int j = 0; j < nLen; j ++)
{
if (visit[vec[i][j]] == 0)
{
DFS(vec[i][j]);
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
其实很简单,就是循环次数的问题,用int i 可能会导致索引超出int 的表示范围,从而导致错误!而使用迭代器就不会产生这样的问题了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你可以输出调试信息,或者写日志看看为什么不一样
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询