void PodstavMin (int n) { std::cout << "Генерация всех перестановок из N элементов с минимальными изменениями:" << std::endl; int i = 0,j = 0,pos1,pos2,value_1,value_2,temp; int *x=new int [n+1]; int *newX=new int [n+1]; int *y=new int [n]; int *d=new int [n]; for(i = 0; i < n; i++) { //Заносим начальные значения. x[i+1]=n-i; newX[i+1]=n-i; d[i]=1; y[i]=0; } while(1) { for(int i = 1; i <= n; i++) //перестановку x. std::cout<= 0 && (y[i] == i && d[i] == 1) || (y[i] == 0 && d[i] == -1);i--); //Ищем самую правую шашку, //у которой есть ход. if(i==-1) break; //Если не нашли, то конец. y[i]=y[i]+d[i]; //Генерируем новый y. pos1 = newX[i+1]; //pos1 – номер элемента i+1 в перестановке value_1 = i+1; //pos2 – номер соседа, с которым будем pos2 = pos1 + d[i]; //его менять. value_2 = x[pos2]; temp = x[pos1]; //Меняем i+1 с соседом x[pos1] = x[pos2]; //в перестановке x и в обратной. x[pos2] = temp; temp = newX[value_1]; newX[value_1] = newX[value_2]; newX[value_2] = temp; for(j = i + 1; j < n ; j++) //Меняем направление движения d[j] =- d[j]; //шашек, которые уперлись в край доски } delete []x; delete []newX; delete []y; delete []d; }