public void HoanViNgauNhienTronglocal(int pos, hoanvi hv) { //hàm này sẽ hoán vị cột/dòng ngẫu nhiên với 1 cột/dòng khác trong phạm vi local( 9 ô vuông nhỏ ) int minPos, maxPos; // xác định khoảng hoán vị minPos = (pos / 3) * 3; maxPos = (pos / 3) * 3 + 2; for (int i = minPos; i <= maxPos; i++) { if (i != pos) { int C = new Random().Next(0, 100); if (new Random().Next(0, 100) % 2 == 0) { //nếu số đầu tiên trong 2 số còn lại được chọn thì sẽ hoán vị vs pos và return HoanVi(hv, pos, i); return; } else { //ngược lại, nếu vị trí đầu k đk chọn tức là vị trí còn lại sẽ hoán vị vs pos for (int j = minPos; j < maxPos; j++) { if (j != i && j != pos) { HoanVi(hv, pos, j); return; } } } } } }
public void HoanVi(hoanvi dong_hay_cot, int obj1, int obj2) { int[] swap = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; if (dong_hay_cot == hoanvi.dong) { //dong for (int i = 0; i < 9; i++) { swap[i] = Data[obj1, i]; Data[obj1, i] = Data[obj2, i]; Data[obj2, i] = swap[i]; } } else { //cot for (int i = 0; i < 9; i++) { swap[i] = Data[i, obj1]; Data[i, obj1] = Data[i, obj2]; Data[i, obj2] = swap[i]; } } }