Mercurial > defical
comparison defical-sharp/libsemtd/label.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 |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:ebed2bd0d300 |
|---|---|
| 1 namespace libsemtd | |
| 2 { | |
| 3 partial class Semtd | |
| 4 { | |
| 5 private void labelReset() | |
| 6 { | |
| 7 this.labelVer = new int[this.numVerMain]; | |
| 8 this.labelEdges = new int[this.numVerMain, this.numVerMain]; | |
| 9 this.labelEdgeAbsoluteMax = 2 * this.numVerTotal - 1; | |
| 10 this.labelEdgesUsed = new int[this.labelEdgeAbsoluteMax + 1]; | |
| 11 //this.scoreCache = -1; | |
| 12 } | |
| 13 private int labelRangeEdge() | |
| 14 { | |
| 15 labelRefreshEdgeMinMax(); | |
| 16 return this.labelEdgeMax - this.labelEdgeMin + 1; | |
| 17 } | |
| 18 private void labelRefreshEdgeMinMax() | |
| 19 { | |
| 20 for (int i = 1; i <= this.labelEdgeAbsoluteMax; i++) | |
| 21 { | |
| 22 if (this.labelEdgesUsed[i] > 0) | |
| 23 { | |
| 24 this.labelEdgeMin = i; | |
| 25 break; | |
| 26 } | |
| 27 } | |
| 28 for (int i = this.labelEdgeAbsoluteMax; i >= 1; i--) | |
| 29 { | |
| 30 if (this.labelEdgesUsed[i] > 0) | |
| 31 { | |
| 32 this.labelEdgeMax = i; | |
| 33 break; | |
| 34 } | |
| 35 } | |
| 36 } | |
| 37 private void labelRemoveVer(int posVer) | |
| 38 { | |
| 39 if (this.labelVer[posVer] > 0) | |
| 40 { | |
| 41 this.labelVer[posVer] = 0; | |
| 42 labelRemoveEdges(posVer); | |
| 43 } | |
| 44 } | |
| 45 private void labelRemoveEdges(int posVer) | |
| 46 { | |
| 47 for (int i = 0; i < this.numVerMain; i++) | |
| 48 { | |
| 49 if (this.labelVer[i] > 0 && i != posVer && this.graphConn[posVer, i]) | |
| 50 { | |
| 51 int labelOld = this.labelEdges[i, posVer]; | |
| 52 this.labelEdgesUsed[labelOld]--; | |
| 53 this.labelEdges[i, posVer] = this.labelEdges[posVer, i] = 0; | |
| 54 } | |
| 55 } | |
| 56 } | |
| 57 private void labelSetVer(int posVer, int labelVer) | |
| 58 { | |
| 59 if (this.labelVer[posVer] > 0) { labelRemoveVer(posVer); } | |
| 60 this.labelVer[posVer] = labelVer; | |
| 61 labelSetEdges(posVer); | |
| 62 } | |
| 63 private void labelSetEdges(int posVer) | |
| 64 { | |
| 65 int labelNew; | |
| 66 for (int i = 0; i < this.numVerMain; i++) | |
| 67 if (i != posVer && | |
| 68 this.graphConn[posVer, i] && | |
| 69 this.labelVer[i] > 0) | |
| 70 { | |
| 71 labelNew = this.labelVer[posVer] + this.labelVer[i]; | |
| 72 this.labelEdges[i, posVer] = this.labelEdges[posVer, i] = labelNew; | |
| 73 this.labelEdgesUsed[labelNew]++; | |
| 74 } | |
| 75 } | |
| 76 private bool isValidToLabel(int posVer, int labelVer) | |
| 77 { | |
| 78 for (int i = 0; i < this.numVerMain; i++) | |
| 79 { | |
| 80 if (this.graphConn[i, posVer] && | |
| 81 this.labelVer[i] > 0 && | |
| 82 this.labelEdgesUsed[this.labelVer[i] + labelVer] == 1) | |
| 83 { | |
| 84 return false; | |
| 85 } | |
| 86 } | |
| 87 return true; | |
| 88 } | |
| 89 private bool isSemt() | |
| 90 { | |
| 91 if (labelRangeEdge() == numEdges) | |
| 92 { | |
| 93 for (int i = this.labelEdgeMin; i <= this.labelEdgeMax; i++) | |
| 94 { | |
| 95 if (this.labelEdgesUsed[i] != 1) | |
| 96 { | |
| 97 return false; | |
| 98 } | |
| 99 } | |
| 100 return true; | |
| 101 } | |
| 102 return false; | |
| 103 } | |
| 104 private int minDef() | |
| 105 { | |
| 106 int ret = 0; | |
| 107 switch (this.graphType) | |
| 108 { | |
| 109 case "wheel": //source: dissertation[1] | |
| 110 switch (this.numVerMain) | |
| 111 { | |
| 112 case 3 | 4 | 6 | 7: | |
| 113 ret = 1; | |
| 114 break; | |
| 115 default: | |
| 116 ret = 2; | |
| 117 break; | |
| 118 } | |
| 119 break; | |
| 120 case "fan": //source: dissertation[1] | |
| 121 if (this.numVerMain <= 7) | |
| 122 ret = 0; | |
| 123 else | |
| 124 ret = 1; | |
| 125 break; | |
| 126 case "doublefan": //source: dissertation[1] | |
| 127 ret = (this.numVerMain - 1) / 2; | |
| 128 break; | |
| 129 default: | |
| 130 // ret = Convert.ToInt32(Math.Ceiling(Convert.ToDecimal(this.numEdges / 2))) + 2 - this.numVertices; | |
| 131 //break; | |
| 132 ret = -1; | |
| 133 break; | |
| 134 } | |
| 135 return ret; | |
| 136 } | |
| 137 } | |
| 138 } |
