#define min(a,b) ((a)<(b))?(a):(b)
bool isLovers(int i, int j){
if (abs(i - j) == 1){
int minVal = min(i, j);
if (minVal % 2 == 0){
return true;
}
}
return false;
}
int minSwapsCouples(int* row, int rowSize){
int pst[60], i, cnt = 0;
int hash[60] = { 0 };
for (i = 0; i){
pst[row[i]] = i;
}
for (i = 0; i1; i += 2){
if (hash[row[i]])
continue;
if ( isLovers(row[i], row[i+1]) ){
hash[row[i]] = hash[row[i + 1]] = 1;
continue;
}
else{
int lovers = (row[i] % 2) ? row[i] - 1 : row[i] + 1;
int num = (pst[lovers] % 2) ? row[pst[lovers] - 1] : row[pst[lovers] + 1];
if (isLovers(row[i + 1], num)){
hash[row[i]] = hash[row[i + 1]] = hash[lovers] = hash[num] = 1;
}
else{
hash[row[i]] = hash[lovers] = 1;
row[pst[lovers]] = row[i + 1];
pst[row[i+1]]=pst[lovers];
}
}
cnt++;
}
return cnt;
}