在模块内部使用For循环遍历排列的问题

时间:2019-09-04 12:09:17

标签: wolfram-mathematica

我正在尝试编写一些代码,以通过创建所有可能的顶点排列并用每个顶点绘制子图来从随机图中提取给定大小的所有不同子图。但是,当我尝试使用For循环执行此操作时,它只会绘制第一个子图。我对Mathematica不太熟悉,所以我不确定问题出在哪里。

创建随机图和排列列表的各个组件都起作用,只有将其放到循环中才能起作用。

模块创建具有n个点和边缘概率为p的随机图

G[n_, p_] := Module[{A, M}, A = Table[If[i < j, If[RandomReal[] < p, 1, 0], 0], {i, 1, n}, {j, 1, n}];
  M = A + Transpose[A];
  Return[AdjacencyGraph[M]];]

查找具有d个顶点的G(n,p)的所有子图的函数


Subcount[n_, p_, d_] := 
 Module[{i, ex, per, sub1}, ex = G[n, p]; per = Permutations[Range[n], {d}];
  For[i = 1, i <= Length[per] , i++, Print[i]; 
   sub1 = HighlightGraph[ex, Subgraph[ex, Part[per, i]]]; 
   Return[sub1]];]

经过n = 5,p = 0.4,d = 3的测试

Subcount[5, 0.4, 3]

https://imgur.com/10jv51R 提供通过示例测试看到的输出。

1 个答案:

答案 0 :(得分:0)

尝试一下

Subcount[n_, p_, d_] := Module[{i, ex, per, sub1},
  ex = G[n, p];
  per = Permutations[Range[n], {d}];
  Table[{i,{HighlightGraph[ex, Subgraph[ex, Part[per, i]]]}},{i,Length[per]}]];
Subcount[5, 0.4, 3]

应该可以显示全部60张图。