ate_steps [999] [2];// Координати Середніх ходівm_and_n_was_swapped=false;
//begin и end - координати качана руху та кінцевого пунктуbegin_and_end_was_swapped=false; abs (int x)
{x lt; 0?-x: x;
} show_result ()
{
//номер Першої на вивід середньої клітінкі, останньої та шаг для
//ціклуbg=0, en=steps - 2, step=1;
//номера Першої та Другої координати на вівідn1=0, n2=1;
//если початкова та кінцева клітінка поміняліся місцямі
//Середні виводимо з последнего по перший (begin_and_end_was_swapped)
{(bg, en);=- 1;
} (m_and_n_was_swapped) swap (n1, n2);
lt; lt; steps lt; lt; endl; (int i=bg; i!=en + step; i +=step)
{ lt; lt; intermediate_steps [i] [n1]; lt; lt; lt; lt; intermediate_steps [i] [n2] lt; lt; endl;
}
} solve ()
{
//если ширина дошки довше ее висота, поміняємо ЦІ значення
//координати кожної точки, а у ВІДПОВІДІ вновь поміняємо х і у
//координати кожної точки (або просто віведемо у виде (у; х) (m gt; n)
{(m, n); (xb, yb); (xe, ye); _ and_n_was_swapped=true;
}
//если на отріманій дошці, в Якій Вже висота (за задумом)
//точно довше висота, пункт призначення нижчих початкової позіції
//слона, поміняемо ЦІ точки ((х1; у1) і (х2; у2)) місцямі,
//а в ВІДПОВІДІ віведемо точки в оберненому порядку (yb gt; ye)
{(xb, xe); (yb, ye); _ and_end_was_swapped=true;
}
//поки слона не может потрапіті з 1 ходу з посаткової позіції
//на кінцеву, шукаємо Наступний позицию (abs (xb - xe)!=abs (yb - ye))
{
//перевірімо, чі можна за 2 ходи потрапіті в кінцеву позицию
//для цього перевірімо чі можна з будь Клітини, на якові можна
//перейти 1 ходом слона, потрапіті одним ходом в кінцеву клітінкуcan_reach_in_2_steps=false; (int x=1; x lt;=m amp; amp;! can_reach_in_2_steps; x ++)
{
//Цьом випадка клітінка, что перевіряється буде збігатіся з
//кліткою, на який знаходівся слон, пропустімо їїy=abs (xb - x) + yb; (abs (x - xe) == abs (y - ye))
{
//значить можна з Клітини (xb; у1) потрапіті на клітку (х2; у2)
//за два ходи, перенесемо слона (xb; у1) на клітинку (х; у),
//а в наступній Перевірці циклу abs (xb - xe)!=abs (yb - ye)
//поверне false, и поиск завершіться_reach_in_2_steps=true;=x;=y;
//додамо клітинку (х; у) в масив проміжніх клітін ++;
//если кроків n (і n gt; 1), проміжніх клітін n - 1,
//а номер последнего Кроку n - 2 (через нумерації з нуля) _steps [steps - 2] [0]=x; _steps [steps - 2] [1]=y;
}
}
//если з двох ходів НЕ дійті, просто піднімемося вищє (! can_reach_in_2_steps)
{(xb - 1 gt; m - xb)
{
//если перший ряд далі, підемо вгору-вліво
//вгору підніметься на Стільки клітін, на скільки и наліво +=xb - 1;
//а вліво до Першого ряду=1;
}
{
//Последний ряд далі, тому підемо вгору-вправо
//вгору підніметься на Стільки клітін, на скільки и вправо +=m - xb;
//а вправо до Першого ряду=m;
}
//додамо клітку (xb; у1) в масив проміжніх клітін ++;
//если кроків n (і n gt; 1), проміжніх клітін n - 1,
//а номер последнего Кроку n - 2 (через нумерації з нуля) _steps [steps - 2] [0]=xb; _steps [steps - 2] [1]=yb;
}
} _ result ();
} check_input_data ()
{(m lt; 1 || m gt; 1000) return false; (n lt; 1 || n gt; 1000) return false; (xb lt; 1 || xb gt; m ) return false; (xe lt; 1 || xe gt; m) return false; (yb lt; 1 || yb gt; n) return false; (ye lt; 1 || ye gt; n) return false; true ;
} main (void)
{ gt; gt; m gt; gt; n gt; gt; xb gt; ...