在R中进行广度优先搜索时更改节点的属性

独狼

我创建了一个具有100个节点的随机(Erdos-Renyi)图。我已将所有100个节点的属性值设置为0。我找到了度数最大(邻居最多)的节点,并将其属性值从0更改为1。然后,将该节点用作根节点,并使用另一个节点作为第二个根节点,我在网络上进行了广度优先搜索(BFS)。

这与这个问题有关

我像这样进行广度优先搜索:

# BFS on the network
bfs <- graph.bfs(graph, root = c(root_node, root_node2), unreachable = FALSE,
    order = TRUE, dist = TRUE)

我要查看第一个根节点的邻居,然后是第二个根节点的邻居,然后是第一个根节点的邻居的邻居,然后是第二个根节点的邻居的邻居,依此类推。

所以像这样:

                O                        # Note: O* is the first root node
                |                        # and O! is the second root node
                |
O----O----O!----O----O*----O----O----O
          |          |
          |          |
          O          O

因此,首先查看第一个根节点的邻居:

                O                        # Note: double connections are
                |                        # the paths taken to the neighbors
                |
O----O----O!----O====O*====O----O----O
          |          ||
          |          ||
          O          O

然后查看第二个根节点的邻居:

                O
                |
                |
O----O====O!====O----O*----O----O----O
          ||         |
          ||         |
          O          O

然后,第一个根节点的邻居的邻居:

                O
                ||
                ||
O----O----O!----O----O*----O====O----O
          |          |
          |          |
          O          O

然后是第二个根节点的邻居的邻居:

                O
                |
                |
O====O----O!----O----O*----O----O----O
          |          |
          |          |
          O          O

依此类推,直到检查完所有节点为止:

                O
                |
                |
O----O----O!----O----O*----O----O====O
          |          |
          |          |
          O          O

在查看每个节点时,我想将其属性值从0更改为1,这样,如果有另一个路径到达,它便知道该节点已被查看。

另外,是否有一种方法可以计算遍历所有节点的迭代次数?例如,这里是6(包括原始的)。

注意:两个根节点以某种方式连接(即,它们之间有一条路径)。

对不起图像,但这是基本概念。希望这是有道理的。

任何帮助将非常感激。谢谢!

威尔·比森

这是怎么做。首先,这是一个随机生成的图。

numnodes <- 50
the.graph <- grg.game(numnodes, 0.3)

V(the.graph)$visited <- 0
graph.degree <- degree(the.graph)

现在,我们采用最大顶点和随机顶点。(您没有指定如何选择第二个)。我们随机重新选择顶点,直到该顶点连接到最大度数顶点为止,而不是最大度数顶点。

maxvertex <- sample(which(graph.degree == max(graph.degree)),1)
randvertex <- as.integer(sample(V(the.graph),1))
while((randvertex == maxvertex) ||
      (shortest.paths(the.graph,maxvertex,randvertex) == Inf)) {
  randvertex <- sample(V(the.graph),1)
}

当遍历这样的图形时,我喜欢跟踪自己的位置。这是起始位置和一行,将这些初始节点标记为已访问。

curpos <- c(maxvertex, randvertex)
for(num in curpos) V(the.graph)[num]$visited <- 1

现在,我们实际上进行搜索并将节点标记为已访问。如果所有节点都标记为已访问,或者没有更多连接的节点可供探索,则循环将终止。如果代码有错误,我们知道搜索的迭代次数不应超过搜索的步骤,因此我们知道它是否遍历了图未连接并且不需要继续。对于每次迭代,我们都要遍历包含当前占用节点的向量。如果尚未访问过它的任何邻居,我们会将其标记为已访问并将其添加到向量中,以备下次使用。一旦访问了此迭代的所有节点,便开始下一个循环。

maxloops = length(V(the.graph))
curloop = 0
while((curloop < maxloops) && (length(curpos)>0) &&
      (sum(V(the.graph)$visited) < numnodes)) {
  nextpos <- c()
  while(length(curpos)>0) {
    curnode <- curpos[1]
    curpos <- curpos[-1]

    adjnodes <- which(the.graph[curnode] == 1)
    for(adjnode in adjnodes) {
      if(!V(the.graph)[adjnode]$visited) {
        nextpos <- c(nextpos,adjnode)
        V(the.graph)[adjnode]$visited <- 1
      }
    }
  }
  curpos <- nextpos
  curloop <- curloop + 1
}

现在,我们已经访问了连接到最大度节点的所有节点。现在,我们打印遍历图形所需的迭代次数。如果未访问任何节点,这将另外打印一条消息,指出该图未连接。

print(curloop)
if(sum(V(the.graph)$visited) < numnodes) print("Not a connected graph.")

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在R中进行广度优先搜索时更改节点的属性

来自分类Dev

在Prolog中进行广度优先搜索

来自分类Dev

在Matlab中对迷宫进行广度优先搜索

来自分类Dev

在有向图上进行广度优先搜索时的边缘分类

来自分类Dev

广度优先搜索未返回正确的节点顺序

来自分类Dev

PHP的广度优先搜索

来自分类Dev

广度优先搜索的效率

来自分类Dev

功能广度优先搜索

来自分类Dev

广度优先搜索的深度

来自分类Dev

广度优先搜索的深度

来自分类Dev

广度优先搜索错误

来自分类Dev

广度优先搜索

来自分类Dev

在Haskell中使用State monad进行广度优先搜索

来自分类Dev

迭代加深深度优先搜索和广度优先搜索生成的节点总数是多少

来自分类Dev

该网络爬虫是在进行广度优先搜索还是深度优先搜索?

来自分类Dev

将广度优先搜索更改为深度优先搜索,N- Queen Solver

来自分类Dev

更改节点的样式

来自分类Dev

根据属性更改节点颜色-neo4j

来自分类Dev

状态空间搜索:A* 和广度优先搜索

来自分类Dev

在广度优先搜索中,如何选择第二个节点?

来自分类Dev

在R中的rCharts sankey图中更改节点的颜色

来自分类Dev

R networkD3更改节点IMG

来自分类Dev

更改节点的默认大小

来自分类Dev

使用replaceChild更改节点

来自分类Dev

如何更改节点标签?

来自分类Dev

在二叉树上进行广度优先搜索的空间复杂度是多少?

来自分类Dev

二维阵列的广度优先搜索

来自分类Dev

Fortran广度优先搜索运行缓慢

来自分类Dev

使用广度优先搜索连接的组件