g1=Graph[{UndirectedEdge[a,b]}];
GraphQ[g1]
(*
OUT: True
*)
(*Needs["Combinatorica`"]*)
PlanarQ[g1]
(*
OUT: PlanarQ[.-.]
*)
Combinatorica`PlanarQ[g1]
(*
OUT: Combinatorica`PlanarQ[.-.]
*)
为什么PlanarQ不回馈“真”或“假”?
答案 0 :(得分:4)
您的图表不是Combinatorica
图表,而是System
图表。您需要明确指定上下文。
Needs["GraphUtilities`"];
g1 = System`Graph[{UndirectedEdge[a, b]}];
Combinatorica`PlanarQ[
GraphUtilities`ToCombinatoricaGraph[g1]]
这会返回True
但是,一般来说,这个过程很痛苦而且很麻烦。我相信Combinatorica
即将结束,我建议不要试着过去。
答案 1 :(得分:2)
您可能需要:
Needs["GraphUtilities`"]
Needs["Combinatorica`"]
cg1 = ToCombinatoricaGraph[g1];
PlanarQ[cg1]
然而,我没有v8来检查。
答案 2 :(得分:2)
请注意,Combinatorica即将退出。但是,三个月前Graph项目的一位负责人告诉我,没有计划为System Graph重新实现算法特定接口,如BrelazColoring
。因此,有些事情可能需要Combinatorica
一段时间,而解决这个问题的一种方法是尝试将System'Graph用于所有内容,将Combinatorica
保留在包路径之外,并通过以下方式获取Combinatorica函数:显式地将Graph对象转换为Combinatorica'Graph对象,调用Combinatorica`function然后转换回系统图。 Here is some discussion with the details
对于后代,这是我用来解决TomD报告的排序问题的relabelGraph
函数,
relabelGraph[g_Graph,labeling_]:=Module[{vcoords,gstyle,labelMap,adjMat,newOrder,newCoords,verts},
verts=VertexList@g;
vcoords=VertexCoordinates/.AbsoluteOptions[g,VertexCoordinates];
gstyle=GraphStyle/.AbsoluteOptions[g,GraphStyle];
labelMap=Thread[Range[Length[verts]]->labeling];
adjMat=Normal@AdjacencyMatrix[g];
newOrder=Ordering[VertexList[g]/.labelMap];
newCoords=Thread[(VertexList[g]/.labelMap)->vcoords];
AdjacencyGraph[adjMat[[newOrder,newOrder]],VertexCoordinates->newCoords,GraphStyle->gstyle]
];
使用它的一种方法如下。这会产生与IndexGraph
类似的结果,但排序为VertexList
g=relabelGraph[g,Range@Length@VertexList@g];
我的“烦恼修复”功能的其他一些功能在包here
中的graphUsage.nb
中有所描述
答案 3 :(得分:1)
这也只是一个注释。
我想特别提请注意ToCombinatoricaGraph
中可能存在的错误以及可能的解决方法。它可能与原始问题无关。
另外,我使用的是Mma 7,因此可以在v8中修复。
如果我按如下方式定义图表
Needs["Combinatorica`"]
Needs["GraphUtilities`"]
gr1 = {2 -> 4, 4 -> 3, 3 -> 1}
gr1的GraphPlot
比较以下内容:
EdgeList@gr1
EdgeList@ToCombinatoricaGraph@gr1
Edges@ToCombinatoricaGraph@gr1
输出
{{2, 4}, {4, 3}, {3, 1}}
{{1, 2}, {2, 3}, {3, 4}}
{{1, 2}, {2, 3}, {3, 4}}
我使用的解决方法是尽可能忽略ToCombinatoricaGraph
,而是使用FromOrderedPairs
转换为 Combinatorica 图表。
例如
Edges@FromOrderedPairs@EdgeList@gr1
EdgeList@FromOrderedPairs@EdgeList@gr1
输出
{{2, 4}, {4, 3}, {3, 1}}
{{2, 4}, {3, 1}, {4, 3}}
另一个例子,Degrees
比较
Degrees@MakeSimple@ToCombinatoricaGraph[gr1]
VertexList@MakeSimple@ToCombinatoricaGraph[gr1]
输出
{1, 2, 2, 1}
{1, 2, 3, 4}
与
Degrees@MakeSimple@FromOrderedPairs@EdgeList@gr1
VertexList@MakeSimple@FromOrderedPairs@EdgeList@gr1
{1, 1, 2, 2}
{1, 2, 3, 4}
我还会在Prufer codes中添加一个示例,因为我在这里被“抓住了”(我当时不知道那样)
LabeledTreeToCode@MakeSimple@ToCombinatoricaGraph@gr1
LabeledTreeToCode@MakeSimple@FromOrderedPairs@EdgeList@gr1
输出
{2, 3}
{3, 4}
(只有第二个答案是正确的)
我已向Wolfram报告此事。看起来,它与ToCombinatoricaGraph
创建图表时的顶点重新排序有关。以下是答复的一部分(2009年)
Edges和EdgeList的原因 不能在ToCombinatoricaGraph上运行 因为Combinatorica包是在这些之前开发的 功能,结构尚未适应运行 用这些 功能
Our development team is currently working to update the Combinatorica package so that these functions will be compatible. If you happen to
运行 如果遇到任何其他问题,或者有任何问题,请放心 我 知道。
在我看来,ToCombinatoricaGraph
需要谨慎使用(尽可能避免使用)。但是,可能存在许多情况(包括原始问题的其他答案中给出的用法),这些情况没有区别。
就个人而言,我不希望看到 Combinatorica 包。它包含许多有用的功能(如果记录非常严重)。