CellPrint[TextCell[Manipulate[If[!MemberQ[{Ai6},Null]&&!MemberQ[{Ai7},Null],If[IntegerQ[Ai6]&&IntegerQ[Ai7],If[Ai6≥1&&Ai7≥2,If[MemberQ[VertexList[KArbol[Ai6,Ai7]],Ai5],Column[{ArbolR[AristasWolframSystemToCombinatorica[EdgeList[KArbol[Ai6,Ai7]]],Ai5,shape->"rectangulo"],Row[{"Las hojas del árbol son: ",Hojas[ArbolR[AristasWolframSystemToCombinatorica[EdgeList[KArbol[Ai6,Ai7]]],Ai5],raiz->Ai5]}],Row[{"La altura del árbol es: ",Altura[ArbolR[AristasWolframSystemToCombinatorica[EdgeList[KArbol[Ai6,Ai7]]],Ai5],Ai5]}]},Center],Ai5=1],If[Ai6<1,Ai6=8];If[Ai7<2,Ai7=12]],If[!IntegerQ[Ai6],Ai6=8];If[!IntegerQ[Ai7],Ai7=12]],If[MemberQ[{Ai6},Null],Ai6=8];If[MemberQ[{Ai7},Null],Ai7=12]],Style["Orden y cantidad de vértices del árbol",12,Bold],{{Ai6,8,"Orden del árbol"}},{{Ai7,12,"Cantidad de nodos"}},Delimiter,{{Ai5,1,"Raíz"},VertexList[KArbol[Ai6,Ai7]],ControlType->PopupMenu},SaveDefinitions->True,Alignment->Center,Initialization:>(Options[KArbol]={combinatorica->False};
KArbol[Ak_,An_,OptionsPattern[]]:=Quiet[Module[{},If[BooleanQ[OptionValue[combinatorica]],If[IntegerQ[Ak]&&IntegerQ[An],If[Ak≥1&&An≥1,If[OptionValue[combinatorica],Clear[Global`G];If[GrafoCQ[CompleteKaryTree[An,Ak]],ShowGraph[Global`G=SetGraphOptions[CompleteKaryTree[An,Ak],VertexColor->Blue,EdgeColor->Black],VertexLabel->True,PlotRange->0.1],"NaD"],If[GrafoQ[KaryTree[An,Ak]],KaryTree[An,Ak,VertexLabels->"Name",ImagePadding->10],"NaD"]]]]]]];
Options[Arbol]={dirigido->False,pesos->{},mostrarpesos->False,shape->"circulo",verticescoordenadas->{}};
Arbol[AAristas_,OptionsPattern[]]:=Module[{AAristasNoDirigidas,AAristasDirigidas,ALabelsPesos,GrafoArbol},AAristasNoDirigidas[AOAritas_]:=Quiet[Cases[AOAritas,Aicontador1_->UndirectedEdge[Aicontador1[[1]],Aicontador1[[2]]]]];AAristasDirigidas[AOAritas_]:=Quiet[Cases[AOAritas,Aicontador2_->DirectedEdge[Aicontador2[[1]],Aicontador2[[2]]]]];ALabelsPesos[GGrafoArbol_,APesos_]:=If[Length[APesos]==EdgeCount[GGrafoArbol],Module[{AList1=EdgeList[GGrafoArbol],AList2={}},For[Ai1=1,Ai1≤Length[AList1],AList2=Append[AList2,AList1[[Ai1]]->APesos[[Ai1]]];Ai1++];AList2]];GrafoArbol[AOAristas_]:=Module[{AVl1},If[OptionValue[mostrarpesos],If[OptionValue[dirigido],If[OptionValue[pesos]=={},AVl1=ALabelsPesos[TreeGraph[AAristasDirigidas[AOAristas],VertexLabels->"Name",ImagePadding->10,VertexCoordinates->OptionValue[verticescoordenadas]],ConstantArray[1,Length[AOAristas]]];TreeGraph[AAristasDirigidas[AOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->ConstantArray[1,Length[AOAristas]],EdgeLabels->AVl1,VertexShapeFunction->If[OptionValue[shape]=="circulo","Circle",If[OptionValue[shape]=="triangulo","Triangle",If[OptionValue[shape]=="cuadrado","Square",If[OptionValue[shape]=="rectangulo","Rectangle",If[OptionValue[shape]=="pentagono","Pentagon",If[OptionValue[shape]=="hexagono","Hexagon","Octagon"]]]]]],VertexCoordinates->OptionValue[verticescoordenadas]],AVl1=ALabelsPesos[TreeGraph[AAristasDirigidas[AOAristas],VertexLabels->"Name",ImagePadding->10,VertexCoordinates->OptionValue[verticescoordenadas]],OptionValue[pesos]];TreeGraph[AAristasDirigidas[AOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos],EdgeLabels->AVl1,VertexShapeFunction->If[OptionValue[shape]=="circulo","Circle",If[OptionValue[shape]=="triangulo","Triangle",If[OptionValue[shape]=="cuadrado","Square",If[OptionValue[shape]=="rectangulo","Rectangle",If[OptionValue[shape]=="pentagono","Pentagon",If[OptionValue[shape]=="hexagono","Hexagon","Octagon"]]]]]],VertexCoordinates->OptionValue[verticescoordenadas]]],If[OptionValue[pesos]=={},AVl1=ALabelsPesos[TreeGraph[AAristasNoDirigidas[AOAristas],VertexLabels->"Name",ImagePadding->10,VertexCoordinates->OptionValue[verticescoordenadas]],ConstantArray[1,Length[AOAristas]]];TreeGraph[AAristasNoDirigidas[AOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->ConstantArray[1,Length[AOAristas]],EdgeLabels->AVl1,VertexShapeFunction->If[OptionValue[shape]=="circulo","Circle",If[OptionValue[shape]=="triangulo","Triangle",If[OptionValue[shape]=="cuadrado","Square",If[OptionValue[shape]=="rectangulo","Rectangle",If[OptionValue[shape]=="pentagono","Pentagon",If[OptionValue[shape]=="hexagono","Hexagon","Octagon"]]]]]],VertexCoordinates->OptionValue[verticescoordenadas]],AVl1=ALabelsPesos[TreeGraph[AAristasNoDirigidas[AOAristas],VertexLabels->"Name",ImagePadding->10,VertexCoordinates->OptionValue[verticescoordenadas]],OptionValue[pesos]];TreeGraph[AAristasNoDirigidas[AOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos],EdgeLabels->AVl1,VertexShapeFunction->If[OptionValue[shape]=="circulo","Circle",If[OptionValue[shape]=="triangulo","Triangle",If[OptionValue[shape]=="cuadrado","Square",If[OptionValue[shape]=="rectangulo","Rectangle",If[OptionValue[shape]=="pentagono","Pentagon",If[OptionValue[shape]=="hexagono","Hexagon","Octagon"]]]]]],VertexCoordinates->OptionValue[verticescoordenadas]]]],If[OptionValue[dirigido],TreeGraph[AAristasDirigidas[AOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos],VertexShapeFunction->If[OptionValue[shape]=="circulo","Circle",If[OptionValue[shape]=="triangulo","Triangle",If[OptionValue[shape]=="cuadrado","Square",If[OptionValue[shape]=="rectangulo","Rectangle",If[OptionValue[shape]=="pentagono","Pentagon",If[OptionValue[shape]=="hexagono","Hexagon","Octagon"]]]]]],VertexCoordinates->OptionValue[verticescoordenadas]],TreeGraph[AAristasNoDirigidas[AOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos],VertexShapeFunction->If[OptionValue[shape]=="circulo","Circle",If[OptionValue[shape]=="triangulo","Triangle",If[OptionValue[shape]=="cuadrado","Square",If[OptionValue[shape]=="rectangulo","Rectangle",If[OptionValue[shape]=="pentagono","Pentagon",If[OptionValue[shape]=="hexagono","Hexagon","Octagon"]]]]]],VertexCoordinates->OptionValue[verticescoordenadas]]]]];If[BooleanQ[OptionValue[dirigido]]&&VectorQ[OptionValue[pesos]]&&BooleanQ[OptionValue[mostrarpesos]]&&StringQ[OptionValue[shape]],If[MemberQ[OptionValue[pesos],Null]==False,If[MatrixQ[AAristas]&&MemberQ[Flatten[AAristas],Null]==False,If[Dimensions[AAristas][[2]]==2&&MemberQ[ToCharacterCode[ToString[AAristas]],62760]==False,If[Length[AAristas]==Length[OptionValue[pesos]]||OptionValue[pesos]=={},If[MemberQ[{"circulo","triangulo","cuadrado","rectangulo","pentagono","hexagono","octagono"},OptionValue[shape]],If[TreeGraphQ[Grafo[AAristas]],If[OptionValue[dirigido],If[GrafoQ[TreeGraph[AAristasDirigidas[AAristas]]],GrafoArbol[AAristas]],If[GrafoQ[TreeGraph[AAristasNoDirigidas[AAristas]]],GrafoArbol[AAristas]]]]]]]]]]];
Options[ArbolR]={dirigido->False,pesos->{},mostrarpesos->False,shape->"circulo"};
ArbolR[AAristas_,ARaiz_,OptionsPattern[]]:=Module[{AArbolAuxiliar1,AList3,AristasToTreePlot},AristasToTreePlot[AOAristas_]:=Quiet[Cases[AOAristas,Aicontador3_->Rule[Aicontador3[[1]],Aicontador3[[2]]]]];If[BooleanQ[OptionValue[dirigido]]&&VectorQ[OptionValue[pesos]]&&BooleanQ[OptionValue[mostrarpesos]]&&StringQ[OptionValue[shape]],If[MemberQ[OptionValue[pesos],Null]==False,If[MatrixQ[AAristas]&&MemberQ[Flatten[AAristas],Null]==False,If[Dimensions[AAristas][[2]]==2&&MemberQ[ToCharacterCode[ToString[AAristas]],62760]==False,If[Length[AAristas]==Length[OptionValue[pesos]]||OptionValue[pesos]=={},If[MemberQ[{"circulo","triangulo","cuadrado","rectangulo","pentagono","hexagono","octagono"},OptionValue[shape]],If[TreeGraphQ[Grafo[AAristas]],AArbolAuxiliar1=Arbol[AAristas];If[MemberQ[VertexList[AArbolAuxiliar1],ARaiz],AArbolAuxiliar1=TreePlot[AristasToTreePlot[AristasWolframSystemToCombinatorica[EdgeList[AArbolAuxiliar1]]],Automatic,ARaiz,VertexLabeling->True,ImagePadding->10];AList3=Flatten[Cases[AArbolAuxiliar1//InputForm,(VertexCoordinateRules->Aicontador4_):>Aicontador4,-1],1];If[ToString[AList3]==ToString[{}],AList3=DeleteDuplicates[Flatten[Flatten[Cases[AArbolAuxiliar1//InputForm,(Line[Aicontador4_]):>Aicontador4,-1],1],1]]];Arbol[AAristas,dirigido->OptionValue[dirigido],pesos->OptionValue[pesos],mostrarpesos->OptionValue[mostrarpesos],shape->OptionValue[shape],verticescoordenadas->AList3]]]]]]]]]];
ArbolQ[AArbol_]:=If[GrafoQ[AArbol],If[TreeGraphQ[AArbol],True,False],If[GrafoCQ[AArbol],If[TreeQ[AArbol],True,False],False]];
Options[Hojas]={raiz->""};
Hojas[AArbol_,OptionsPattern[]]:=Module[{AArbolAuxiliar7},If[GrafoQ[AArbol],If[ArbolQ[AArbol],If[ToString[OptionValue[raiz]]==ToString[""],Select[VertexList[AArbol],VertexDegree[AArbol,#]==1&],If[MemberQ[VertexList[AArbol],OptionValue[raiz]],Complement[Select[VertexList[AArbol],VertexDegree[AArbol,#]==1&],{OptionValue[raiz]}]]]],If[GrafoCQ[AArbol],If[ArbolQ[AArbol],AArbolAuxiliar7=CombinatoricaToGraph[AArbol];If[ToString[OptionValue[raiz]]==ToString[""],Select[VertexList[AArbolAuxiliar7],VertexDegree[AArbolAuxiliar7,#]==1&],If[MemberQ[VertexList[AArbolAuxiliar7],OptionValue[raiz]],Complement[Select[VertexList[AArbolAuxiliar7],VertexDegree[AArbolAuxiliar7,#]==1&],{OptionValue[raiz]}]]]]]]];
Altura[AArbol_,ARaiz_]:=Module[{AArbolAuxiliar8,AArbolAuxiliar9},If[GrafoQ[AArbol],If[ArbolQ[AArbol],If[MemberQ[VertexList[AArbol],ARaiz],If[GrafoDirigidoQ[AArbol],AArbolAuxiliar9=Grafo[AristasWolframSystemToCombinatorica[EdgeList[AArbol]]];VertexEccentricity[AArbolAuxiliar9,ARaiz],VertexEccentricity[AArbol,ARaiz]]]],If[GrafoCQ[AArbol],If[ArbolQ[AArbol],AArbolAuxiliar8=CombinatoricaToGraph[AArbol];If[MemberQ[VertexList[AArbolAuxiliar8],ARaiz],If[GrafoDirigidoQ[AArbolAuxiliar8],AArbolAuxiliar9=Grafo[AristasWolframSystemToCombinatorica[EdgeList[AArbolAuxiliar8]]];VertexEccentricity[AArbolAuxiliar9,ARaiz],VertexEccentricity[AArbolAuxiliar8,ARaiz]]]]]]];
AristasWolframSystemToCombinatorica[GAristasGrafo_]:=Module[{GGrafoAuxiliar1=System`Graph[GAristasGrafo]},If[GraphQ[GGrafoAuxiliar1],Quiet[Cases[GAristasGrafo,Gicontador1_->{Gicontador1[[1]],Gicontador1[[2]]}]]]];
AristasMixtasQ[GGrafo_]:=If[GrafoQ[GGrafo],If[Select[EdgeList[GGrafo],DirectedEdge[#[[1]],#[[2]]]==#&]≠{}&&Select[EdgeList[GGrafo],UndirectedEdge[#[[1]],#[[2]]]==#&]≠{},True,False]];
Options[Grafo]={dirigido->False,vertices->{},dimensions3d->False,pesos->{},mostrarpesos->False,shape->False};
Grafo[GAristas_,OptionsPattern[]]:=Module[{GAristasNoDirigidas,GAristasDirigidas,GLabelsPesos,Grafo3d,GrafoNo3d},GAristasNoDirigidas[GOAritas_]:=Quiet[Cases[GOAritas,Gicontador4_->UndirectedEdge[Gicontador4[[1]],Gicontador4[[2]]]]];GAristasDirigidas[GOAritas_]:=Quiet[Cases[GOAritas,Gicontador5_->DirectedEdge[Gicontador5[[1]],Gicontador5[[2]]]]];GLabelsPesos[GGrafo_,GPesos_]:=If[Length[GPesos]==EdgeCount[GGrafo],Module[{GList1=EdgeList[GGrafo],GList2={}},For[Gi1=1,Gi1≤Length[GList1],GList2=Append[GList2,GList1[[Gi1]]->GPesos[[Gi1]]];Gi1++];GList2]];Grafo3d[GOAristas_]:=Module[{GVl1},If[OptionValue[shape],If[OptionValue[mostrarpesos],If[OptionValue[dirigido],If[OptionValue[pesos]=={},GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],ConstantArray[1,Length[GOAristas]]];Graph3D[OptionValue[vertices],GAristasDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->ConstantArray[1,Length[GOAristas]],EdgeLabels->GVl1,VertexShapeFunction->({White,EdgeForm[Black] ,Sphere[#,.1],Black,Text[#2,#1]}&)],GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],OptionValue[pesos]];Graph3D[OptionValue[vertices],GAristasDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->OptionValue[pesos],EdgeLabels->GVl1,VertexShapeFunction->({White,EdgeForm[Black] ,Sphere[#,.1],Black,Text[#2,#1]}&)]],If[OptionValue[pesos]=={},GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],ConstantArray[1,Length[GOAristas]]];Graph3D[OptionValue[vertices],GAristasNoDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->ConstantArray[1,Length[GOAristas]],EdgeLabels->GVl1,VertexShapeFunction->({White,EdgeForm[Black] ,Sphere[#,.1],Black,Text[#2,#1]}&)],GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],OptionValue[pesos]];Graph3D[OptionValue[vertices],GAristasNoDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->OptionValue[pesos],EdgeLabels->GVl1,VertexShapeFunction->({White,EdgeForm[Black] ,Sphere[#,.1],Black,Text[#2,#1]}&)]]],If[OptionValue[dirigido],Graph3D[OptionValue[vertices],GAristasDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->OptionValue[pesos],VertexShapeFunction->({White,EdgeForm[Black] ,Sphere[#,.1],Black,Text[#2,#1]}&)],Graph3D[OptionValue[vertices],GAristasNoDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->OptionValue[pesos],VertexShapeFunction->({White,EdgeForm[Black] ,Sphere[#,.1],Black,Text[#2,#1]}&)]]],If[OptionValue[mostrarpesos],If[OptionValue[dirigido],If[OptionValue[pesos]=={},GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],ConstantArray[1,Length[GOAristas]]];Graph3D[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->ConstantArray[1,Length[GOAristas]],EdgeLabels->GVl1],GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],OptionValue[pesos]];Graph3D[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos],EdgeLabels->GVl1]],If[OptionValue[pesos]=={},GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],ConstantArray[1,Length[GOAristas]]];Graph3D[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->ConstantArray[1,Length[GOAristas]],EdgeLabels->GVl1],GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],OptionValue[pesos]];Graph3D[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos],EdgeLabels->GVl1]]],If[OptionValue[dirigido],Graph3D[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos]],Graph3D[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos]]]]]];GrafoNo3d[GOAristas_]:=Module[{GVl1},If[OptionValue[shape],If[OptionValue[mostrarpesos],If[OptionValue[dirigido],If[OptionValue[pesos]=={},GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],ConstantArray[1,Length[GOAristas]]];System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->ConstantArray[1,Length[GOAristas]],EdgeLabels->GVl1,VertexShapeFunction->({White,EdgeForm[Black] ,Disk[#,.1],Black,Text[#2,#1]}&)],GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],OptionValue[pesos]];System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->OptionValue[pesos],EdgeLabels->GVl1,VertexShapeFunction->({White,EdgeForm[Black] ,Disk[#,.1],Black,Text[#2,#1]}&)]],If[OptionValue[pesos]=={},GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],ConstantArray[1,Length[GOAristas]]];System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->ConstantArray[1,Length[GOAristas]],EdgeLabels->GVl1,VertexShapeFunction->({White,EdgeForm[Black] ,Disk[#,.1],Black,Text[#2,#1]}&)],GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],OptionValue[pesos]];System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->OptionValue[pesos],EdgeLabels->GVl1,VertexShapeFunction->({White,EdgeForm[Black] ,Disk[#,.1],Black,Text[#2,#1]}&)]]],If[OptionValue[dirigido],System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->OptionValue[pesos],VertexShapeFunction->({White,EdgeForm[Black] ,Disk[#,.1],Black,Text[#2,#1]}&)],System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],ImagePadding->10,System`EdgeWeight->OptionValue[pesos],VertexShapeFunction->({White,EdgeForm[Black] ,Disk[#,.1],Black,Text[#2,#1]}&)]]],If[OptionValue[mostrarpesos],If[OptionValue[dirigido],If[OptionValue[pesos]=={},GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],ConstantArray[1,Length[GOAristas]]];System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->ConstantArray[1,Length[GOAristas]],EdgeLabels->GVl1],GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],OptionValue[pesos]];System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos],EdgeLabels->GVl1]],If[OptionValue[pesos]=={},GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],ConstantArray[1,Length[GOAristas]]];System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->ConstantArray[1,Length[GOAristas]],EdgeLabels->GVl1],GVl1=GLabelsPesos[System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10],OptionValue[pesos]];System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos],EdgeLabels->GVl1]]],If[OptionValue[dirigido],System`Graph[OptionValue[vertices],GAristasDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos]],System`Graph[OptionValue[vertices],GAristasNoDirigidas[GOAristas],VertexLabels->"Name",ImagePadding->10,System`EdgeWeight->OptionValue[pesos]]]]]];If[BooleanQ[OptionValue[dirigido]]&&VectorQ[OptionValue[vertices]]&&BooleanQ[OptionValue[dimensions3d]]&&VectorQ[OptionValue[pesos]]&&BooleanQ[OptionValue[mostrarpesos]]&&BooleanQ[OptionValue[shape]],If[MemberQ[OptionValue[vertices],Null]==False&&MemberQ[OptionValue[pesos],Null]==False,If[(MatrixQ[GAristas]||ToString[GAristas]==ToString[{}])&&MemberQ[Flatten[GAristas],Null]==False,If[Length[GAristas]==Length[OptionValue[pesos]]||OptionValue[pesos]=={},If[(ToString[GAristas]==ToString[{}]&&OptionValue[vertices]≠{})||(MatrixQ[GAristas]&&Dimensions[GAristas][[2]]==2&&MemberQ[ToCharacterCode[ToString[GAristas]],62760]==False),If[OptionValue[dimensions3d],Grafo3d[GAristas],GrafoNo3d[GAristas]]]]]]]];
PesosAristas[GGrafo_]:=If[GrafoQ[GGrafo],If[WeightedGraphQ[GGrafo],If[AristasMixtasQ[GGrafo],If[Length[Quiet[Cases[System`EdgeList[GGrafo],Gicontador6_-> NumericQ[PropertyValue[{GGrafo,Gicontador6},System`EdgeWeight]]]]]==EdgeCount[GGrafo],GList3=Table[{EdgeList[GGrafo][[Gi2]],PropertyValue[{GGrafo,EdgeList[GGrafo][[Gi2]]},System`EdgeWeight]},{Gi2,1,EdgeCount[GGrafo]}]];GList4=Select[GList3,DirectedEdge[#[[1]][[1]],#[[1]][[2]]]==#[[1]]&];GList5=Select[GList3,UndirectedEdge[#[[1]][[1]],#[[1]][[2]]]==#[[1]]&]/.UndirectedEdge->DirectedEdge;Join[GList4,GList5,Reverse[GList5,3]],If[Length[Quiet[Cases[System`EdgeList[GGrafo],Gicontador6_-> NumericQ[PropertyValue[{GGrafo,Gicontador6},System`EdgeWeight]]]]]==EdgeCount[GGrafo],Table[{EdgeList[GGrafo][[Gi2]],PropertyValue[{GGrafo,EdgeList[GGrafo][[Gi2]]},System`EdgeWeight]},{Gi2,1,EdgeCount[GGrafo]}]]]],If[GrafoCQ[GGrafo],If[ListQ[Edges[GGrafo,EdgeWeight]],Edges[GGrafo,EdgeWeight]]]];
GrafoQ[GGrafo_]:=If[GraphQ[GGrafo],True,False];
GrafoCQ[GGrafo_]:=If[NumericQ[V[GGrafo]],If[V[GGrafo]==0,False,True],False];
Options[CombinatoricaToGraph]={dimensions3d->False,mostrarpesos->False,shape->False};
CombinatoricaToGraph[GGrafo_,OptionsPattern[]]:=Module[{GrafoO3d,GrafoONo3d},GrafoO3d[GOGrafo_]:=Module[{GVl2},If[UndirectedQ[GOGrafo],If[ListQ[PesosAristas[GOGrafo]],GVl2=Flatten[PesosAristas[GOGrafo],1];GVl2=Select[GVl2,VectorQ[#]==False&];Grafo[Edges[GOGrafo],dirigido->False,vertices->Table[Gi4,{Gi4,1,V[GOGrafo]}],dimensions3d->True,pesos->GVl2,mostrarpesos->OptionValue[mostrarpesos],shape->OptionValue[shape]],Grafo[Edges[GOGrafo],dirigido->False,vertices->Table[Gi4,{Gi4,1,V[GOGrafo]}],dimensions3d->True,mostrarpesos->OptionValue[mostrarpesos],shape->OptionValue[shape]]],If[ListQ[PesosAristas[GOGrafo]],GVl2=Flatten[PesosAristas[GOGrafo],1];GVl2=Select[GVl2,VectorQ[#]==False&];Grafo[Edges[GOGrafo],dirigido->True,vertices->Table[Gi4,{Gi4,1,V[GOGrafo]}],dimensions3d->True,pesos->GVl2,mostrarpesos->OptionValue[mostrarpesos],shape->OptionValue[shape]],Grafo[Edges[GOGrafo],dirigido->True,vertices->Table[Gi4,{Gi4,1,V[GOGrafo]}],dimensions3d->True,mostrarpesos->OptionValue[mostrarpesos],shape->OptionValue[shape]]]]];GrafoONo3d[GOGrafo_]:=Module[{GVl2},If[UndirectedQ[GOGrafo],If[ListQ[PesosAristas[GOGrafo]],GVl2=Flatten[PesosAristas[GOGrafo],1];GVl2=Select[GVl2,VectorQ[#]==False&];Grafo[Edges[GOGrafo],dirigido->False,vertices->Table[Gi4,{Gi4,1,V[GOGrafo]}],dimensions3d->False,pesos->GVl2,mostrarpesos->OptionValue[mostrarpesos],shape->OptionValue[shape]],Grafo[Edges[GOGrafo],dirigido->False,vertices->Table[Gi4,{Gi4,1,V[GOGrafo]}],dimensions3d->False,mostrarpesos->OptionValue[mostrarpesos],shape->OptionValue[shape]]],If[ListQ[PesosAristas[GOGrafo]],GVl2=Flatten[PesosAristas[GOGrafo],1];GVl2=Select[GVl2,VectorQ[#]==False&];Grafo[Edges[GOGrafo],dirigido->True,vertices->Table[Gi4,{Gi4,1,V[GOGrafo]}],dimensions3d->False,pesos->GVl2,mostrarpesos->OptionValue[mostrarpesos],shape->OptionValue[shape]],Grafo[Edges[GOGrafo],dirigido->True,vertices->Table[Gi4,{Gi4,1,V[GOGrafo]}],dimensions3d->False,mostrarpesos->OptionValue[mostrarpesos],shape->OptionValue[shape]]]]];If[BooleanQ[OptionValue[dimensions3d]]&&BooleanQ[OptionValue[mostrarpesos]]&&BooleanQ[OptionValue[shape]],If[GrafoCQ[GGrafo],If[OptionValue[dimensions3d],GrafoO3d[GGrafo],GrafoONo3d[GGrafo]]]]];
GrafoDirigidoQ[GGrafo_]:=If[GrafoQ[GGrafo],If[UndirectedGraphQ[GGrafo],False,True],If[GrafoCQ[GGrafo],If[UndirectedQ[GGrafo],False,True]]])],"Text"]]

Autores: Juan Félix Ávila Herrera y Enrique Vílchez Quesada, Escuela de Informática, Universidad Nacional de Costa Rica,  .