Mercurial > defical
view 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 source
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; } } }