String TileCell::Description(void) const { String result = mTile.Description(); if (IsSwap()) { result += " to swap area"; } else { result += " on " + String(mCell); } return result; }
TileCell::operator String(void) const { String result = String(mTile.Id()) + SEPARATOR; if (IsSwap()) { result += SWAP; } else { result += String(mCell); } return result; }
//k表示当前选取到第几个数, m表示共有多少数. void PermutationHaveSameword(char *pszStr, int k, int m) { if (k == m) { printf("%s\n", pszStr); } else { for (int i = k; i <= m; i++) { //第i个数分别与它后面的数字交换就能得到新的排列 if (IsSwap(pszStr, k, i)) { swap(pszStr[k], pszStr[i]); PermutationHaveSameword(pszStr, k + 1, m); swap(pszStr[k], pszStr[i]); } } }
LRModel::ReorderingType LRModel:: GetOrientation(Range const& prev, Range const& cur, Bitmap const& cov) const { return ((m_modelType == LeftRight) ? cur.GetStartPos() > prev.GetEndPos() ? R : L : IsMonotonicStep(prev,cur,cov) ? M : (m_modelType == Monotonic) ? NM : IsSwap(prev,cur,cov) ? S : (m_modelType == MSD) ? D : cur.GetStartPos() > prev.GetEndPos() ? DR : DL); }
void permutation(vector<int> &num,int from,int to,vector<vector<int>> &ret) { if(from==to) { vector<int> one; for(int i=0;i<num.size();i++) { one.push_back(num[i]); } ret.push_back(one); return; } for(int i=from;i<=to;i++) { if(IsSwap(num,from,i)) continue; swap(num[i],num[from]); permutation(num,from+1,to,ret); swap(num[i],num[from]); } }
void AllRange(char *pszStr, int k, int m) { int i; if (k == m) { static int s_i = 1; printf("%d\t%s\n", s_i++, pszStr); } else { for (i = k; i <= m; i++) { if (IsSwap(pszStr, k, i)) { Swap(pszStr + k, pszStr + i); AllRange(pszStr, k + 1, m); Swap(pszStr + k, pszStr + i); } } } }
void P(char *a, int startpoint, int m) { if (startpoint == m) { printf("%s\n",a); //return; } else { for (int i = startpoint; i < m; i++) { if (IsSwap(a, startpoint, i)) { change(a + i, a + startpoint); P(a, startpoint + 1, m); change(a + i, a + startpoint); } } } }