在c ++中使用STL实现BFS

时间:2014-07-05 12:27:12

标签: c++ arrays stl iterator

我正在尝试使用STL在c ++中编写BFS代码。这是我遇到问题的代码部分

std::list<int> li=*i;
for (std::list<int>::iterator iter=li.begin(); iter!=li.end();++iter)
{
  if (arr[iter]==0)
  {
    myQ.push(iter);
    arr[iter]=1;

这里arr是存储我是否看过节点的数组。我收到了错误 &#34; arr[iter]

中的运算符arr []不匹配

3 个答案:

答案 0 :(得分:0)

iter是一个迭代器,所以是一种指针,而不是整数。这是whiy []不起作用,因为它需要一个整数。

尝试使用arr[*iter],然后您的广度优先搜索将成功避免周期。

请注意,如果myQ也应该包含节点,那么你的推送(iter)就有同样的潜在问题。

通过将arr定义为集合而不是数组/向量,可以进一步改进设计。 您的情况如下:

if (arr.count(*iter) == 0)  {
    myQ.push_back(*iter);
    arr.insert(*iter);  // works for int, but also other data types
}

答案 1 :(得分:0)

Iam通过在整数数组中假设arr来回答。 任何数组elemet只能通过其整数索引访问,但不能访问整数索引的地址。 这里iter是可以存储整数地址的指针。

所以你必须使用'*'来检索存储在地址中的值以获得整数值。

所以将array [iter]更改为array [* iter] ..

希望这能解决您的问题。

答案 2 :(得分:0)

这里iter是一个迭代器,它是指向列表的指针,所以为了访问它的值,你必须编写* iter(它指向的访问值)而不是iter(它是引用)。

试试这个

Function ColorMax(Color As Integer) As Single

Dim x As Integer
Dim y As Integer
ColorMax = 0
With Application.Caller.Parent
    For x = 1 To 1000
        For y = 1 To 1000
            If Cells(x, y).Interior.ColorIndex = Color And .Cells(x, y).Value > ColorMax  Then
                ColorMax = .Cells(x, y).Value
            End If
        Next
    Next
End With

End Function