Mercurial > defical
diff defical-sharp/libsemtd/print.cs @ 0:ebed2bd0d300
Initial import from svn. History be damned.
author | Edho P. Arief <me@myconan.net> |
---|---|
date | Fri, 02 Apr 2010 23:11:57 +0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/defical-sharp/libsemtd/print.cs Fri Apr 02 23:11:57 2010 +0700 @@ -0,0 +1,221 @@ +namespace libsemtd +{ + public partial class Semtd + { + private string sep = " | "; + private string print(int mode) + { + return printBasic() + sep + + printMagicNum(mode) + sep + + printLabels(mode) + sep + + printDef(mode) + sep + + printMisc(mode); + } + private string printBasic() + { + string ret = ""; + ret += "graph: " + this.graphType + + sep + + "edges: " + this.numEdges.ToString() + + sep + + "vertices: " + this.numVerMain.ToString() + + sep + + "deficiencies: " + this.numVerDef.ToString(); + return ret; + } + private string printMagicNum(int mode) + { + string ret = ""; + int edgeWeight, edgeLabel; + edgeLabel = edgeWeight = 0; + for (int i = 1; i <= this.labelEdgeAbsoluteMax; i++) + { + if (this.labelEdgesUsed[i] > 0) + { + edgeWeight = i; + edgeLabel = this.numEdges + this.numVerTotal; + break; + } + } + if (mode == 1) + { + edgeWeight = 2 * (this.numVerTotal) + 2 - edgeWeight; + edgeLabel = 2 * this.numVerTotal + this.numEdges + 1 - edgeLabel; + } + ret += "mnum: " + (edgeWeight + edgeLabel).ToString(); + return ret; + } + private string printLabels(int mode) + { + string ret = ""; + int[] myLabelVer = new int[this.NumVerMain]; + for (int i = 0; i < this.NumVerMain; i++) + { + if (mode == 1) + { + myLabelVer[i] = this.numVerTotal + 1 - this.labelVer[i]; + } + else + { + myLabelVer[i] = this.labelVer[i]; + } + } + if (this.graphType == "doublefan" && myLabelVer[0] > myLabelVer[1]) + { + int temp = myLabelVer[0]; + myLabelVer[0] = myLabelVer[1]; + myLabelVer[1] = temp; + } + int startPath=0; + int endPath=0; + switch (graphType) + { + case "fan": + { + startPath = 1; + endPath=this.numVerMain-1; + break; + } + case "doublefan": + case "wheel": + { + startPath = 2; + endPath=this.numVerMain-1; + break; + } + } + if (startPath > 0 && myLabelVer[startPath] > myLabelVer[endPath]) + { + int a = startPath, b = endPath; + while (a < b) + { + int temp = myLabelVer[a]; + myLabelVer[a] = myLabelVer[b]; + myLabelVer[b] = temp; + a++; b--; + } + } + for (int i = 0; i < this.numVerMain; i++) + { + int myLabel=myLabelVer[i]; + if (i == 0) + switch (graphType) + { + case "wheel": + { + ret += "c: " + myLabel.ToString() + + sep + + "l: "; + break; + } + case "fan": + { + ret += "c: " + myLabel.ToString() + + sep + + "p: "; + break; + } + case "doublefan": + { + ret += "c: " + myLabel.ToString() + ","; + break; + } + } + else if (i == 1 && this.graphType == "doublefan") + { + ret += myLabel.ToString() + + sep + + "p: "; + } + else if (i == this.numVerMain-1) + ret += myLabel.ToString(); + else + ret += myLabel.ToString() + ","; + } + return ret; + } + private string printDef(int mode) + { + string ret = ""; + if (this.numVerDef > 0) + { + ret += "def: "; + bool[] labelVerUsed = new bool[this.numVerTotal + 1]; + for (int i = 0; i < this.numVerMain; i++) + labelVerUsed[this.labelVer[i]] = true; + int amountDef = 0; + for (int i = 1; i <= this.numVerTotal; i++) + { + int myDef; + if (!labelVerUsed[i]) + { + if (mode == 1) + myDef = this.numVerTotal + 1 - i; + else + myDef = i; + if (amountDef == this.numVerDef - 1) + { + ret += myDef.ToString(); + break; + } + else + { + ret += myDef.ToString() + ","; + amountDef++; + } + } + } + } + return ret; + } + private string printMisc(int mode) + { + string ret = ""; + if (this.graphType == "wheel" || this.graphType == "fan" || this.graphType == "doublefan") + { + int startPath, endPath; + startPath = 0; + switch (this.graphType) + { + case "fan": + { + startPath = 1; + break; + } + case "wheel": + case "doublefan": + { + startPath = 2; + break; + } + } + endPath = this.numVerMain-1; + bool isConstant = true; + for (int i = startPath; i < endPath; i++) + { + if (mode == 0) + { + if (this.labelVer[i] > this.labelVer[i + 1]) + { + isConstant = false; + break; + } + } + else if (mode == 1) + { + if (this.labelVer[i] < this.labelVer[i + 1]) + { + isConstant = false; + break; + } + } + } + if (isConstant) + ret += "constant"; + } + if (mode == 1) + ret += "dual"; + return ret; + } + } +} \ No newline at end of file