You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中实现网络节点全扩散着色及重复着色节点追踪

解决网格网络颜色扩散与重叠节点追踪问题

1. 实现全节点颜色扩散

基于你已有的create_colored_network函数,我们可以通过迭代扩散逐步将颜色覆盖到所有空白节点:每次遍历当前已着色节点,将其未着色邻居染为对应浅色,重复操作直到无空白节点。

扩展后的代码片段:

library(igraph)
library(colorspace)

create_colored_network <- function(grid_size = 10, num_sources = 3) {
  # 创建网格网络
  g <- make_lattice(c(grid_size, grid_size))
  
  # 随机选择源节点并分配初始颜色
  source_nodes <- sample(V(g), num_sources)
  source_colors <- qualitative_hcl(num_sources)
  V(g)$color <- "white"  # 初始化所有节点为空白
  V(g)$color[source_nodes] <- source_colors
  
  # 初始化颜色历史记录(用于追踪重叠)
  V(g)$color_history <- lapply(1:vcount(g), function(x) character(0))
  for (node in source_nodes) {
    V(g)$color_history[[node]] <- c(V(g)$color_history[[node]], source_colors[which(source_nodes == node)])
  }
  
  # 迭代扩散颜色直到所有节点着色
  while (any(V(g)$color == "white")) {
    colored_nodes <- which(V(g)$color != "white")
    
    for (node in colored_nodes) {
      neighbors <- neighbors(g, node)
      uncolored_neighbors <- neighbors[V(g)$color[neighbors] == "white"]
      
      if (length(uncolored_neighbors) > 0) {
        # 生成对应浅色
        light_color <- lighten(V(g)$color[node], amount = 0.3)
        # 为邻居着色
        V(g)$color[uncolored_neighbors] <- light_color
        # 更新颜色历史
        for (n in uncolored_neighbors) {
          V(g)$color_history[[n]] <- c(V(g)$color_history[[n]], V(g)$color[node])
        }
      }
    }
  }
  
  return(g)
}

关键说明:

  • 用while循环持续扩散,直到无空白节点
  • 每次仅处理已着色节点的未着色邻居,避免重复操作
  • 扩散时通过lighten保持颜色与源节点的关联性

2. 追踪被多种颜色着色的节点

通过为每个节点添加color_history属性记录所有着色记录,后续可快速筛选重叠节点:

# 生成带颜色扩散的网络
g <- create_colored_network(grid_size = 10, num_sources = 3)

# 提取重叠节点(被多种颜色着色过)
overlap_nodes <- which(sapply(V(g)$color_history, length) > 1)

# 查看重叠节点的着色历史
for (node in overlap_nodes) {
  cat("节点", node, "的着色历史:", paste(V(g)$color_history[[node]], collapse = ", "), "\n")
}

# 可视化时标记重叠节点
V(g)$color[overlap_nodes] <- "gray"
plot(g, vertex.size = 10, vertex.label = NA)

关键说明:

  • color_history为列表类型,每个元素存储对应节点的所有着色记录
  • 通过sapply统计历史长度,快速定位重叠节点
  • 可视化时可将重叠节点设为特殊颜色,直观展示重叠区域

内容的提问来源于stack exchange,提问作者farrow90

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:12:42