关于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想实现的是 判断这个无向图是否为欧拉图(还未判断奇点)
展开
 我来答
有你的晴天12138
2014-04-07 · TA获得超过1001个赞
知道小有建树答主
回答量:305
采纳率:80%
帮助的人:206万
展开全部
// 你的 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]);
    }
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
丶淡淡念起你
2014-03-25 · 超过16用户采纳过TA的回答
知道答主
回答量:53
采纳率:0%
帮助的人:38.1万
展开全部
其实很简单,就是循环次数的问题,用int i 可能会导致索引超出int 的表示范围,从而导致错误!而使用迭代器就不会产生这样的问题了!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhangqingxian
2014-03-25 · TA获得超过268个赞
知道小有建树答主
回答量:362
采纳率:0%
帮助的人:303万
展开全部
你可以输出调试信息,或者写日志看看为什么不一样
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式