在Pari / GP中为路径图编写代码

时间:2019-09-09 10:01:56

标签: graph-theory adjacency-matrix pari pari-gp

我试图在Pari中的n个顶点上为路径图的邻接矩阵编写一个矩阵。为了清楚起见,当我说图P_n时,是指具有n个顶点和n-1个边的图。

到目前为止,我已经针对特定情况做到了这一点:

path2=matrix(2,2,i,j);for(i=1,2-1,path2[i,i+1]=1);for(i=2,2,path2[i,i-1]=1);path2

path3=matrix(3,3,i,j);for(i=1,3-1,path3[i,i+1]=1);for(i=2,3,path3[i,i-1]=1);path3

但是,我想要一个可以选择路径长度的代码。类似于path(n)=...。当我使用上面的代码尝试此操作时,我得到以下信息:

path(n)=matrix(n,n,i,j);for(i=1,n-1,path(n)[i,i+1]=1);for(i=2,n,path(n)[i,i-1]=1);path(n)
  ***   expected character: ',' or ')' instead of: ...or(i=1,n-1,path(n)[i,i+1]
  ***   =1);for(i=2,n,path(n)
  ***   ^---------------------

我不确定这是否是写这篇文章的正确方法,并且我遗漏了一些细微的东西,或者我是否应该为此做一些不同的事情。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

做您想完成的事情的最简单方法是:

path(n)={matrix(n,n,i,j,abs(i-j)==1)}

出现错误的原因是您似乎对变量和函数有误解。您的代码的正确实现是:

path(n)={my(adj=matrix(n,n,i,j)); for(i=1,n-1, adj[i,i+1]=1); for(i=2,n,adj[i,i-1]=1); adj}

这定义了一个名为path的函数。在此函数内部,声明了一个名为adj的局部变量,然后将其填充。函数结束时,返回adj。请注意,函数中的最终表达式是返回的内容-无需使用显式的return语句。

但是,正如我的第一个建议所显示的那样,使用该语言的功能通常可以很容易地避免大量代码。