在模块内使用 For 循环迭代排列的问题
Problem using For loop inside module to iterate over permutations
我正在尝试编写一些代码,通过创建所有可能的顶点排列并使用每个顶点绘制子图,从随机图中提取给定大小的所有不同子图。但是,当我尝试使用 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]];]
求G(n,p)的所有d个顶点的子图的函数
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
给出通过示例测试看到的输出。
试试这个
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 个图表。
我正在尝试编写一些代码,通过创建所有可能的顶点排列并使用每个顶点绘制子图,从随机图中提取给定大小的所有不同子图。但是,当我尝试使用 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]];]
求G(n,p)的所有d个顶点的子图的函数
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 给出通过示例测试看到的输出。
试试这个
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 个图表。