Advertisement
Guest User

Untitled

a guest
May 23rd, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <locale.h>
  3.  
  4. int min (int a, int b)
  5. {
  6.     return a < b? a : b;
  7. }
  8. int main(int argc, char const *argv[])
  9. {
  10.     setlocale(LC_ALL, "Rus");
  11.     int n, m, x1, y1, x2, y2;
  12.     int field[n][m];
  13.     //Вводим данные
  14.     printf("Введите размеры поля: ");
  15.     scanf("%d %d", &n, &m);
  16.     printf("Введите координаты первой клетки: ");
  17.     scanf("%d %d", &x1, &y1);
  18.     printf("Введите координаты второй клетки: ");
  19.     scanf("%d %d", &x2, &y2);
  20.     // Обнуляем массив
  21.     for (int i = 0; i < n; ++i)
  22.         for (int j = 0; j < m; ++j)
  23.             field[i][j] = 0;
  24.     // Находим путь по такому принципу: смотрим разницу между x и y координатами
  25.     // Одним из кратчайших путей будет сначала проход по диагонали пока одна из координат (или сразу обе) не станут равны
  26.     // А затем по прямой до самой точки
  27.  
  28.     // Определим в какую сторону двигаться
  29.     int stepX = x2 - x1 > 0? 1 : -1;
  30.     int stepY = y2 - y1 > 0? 1 : -1;
  31.     // Пройдем по диагонали до нужной точки пока не останется пройти по прямой
  32.     while ((x2 - x1 != 0) && (y2 - y1 != 0))
  33.     {
  34.         x1 += stepX;
  35.         y1 += stepY;
  36.         printf("x=%d y=%d\n", x1, y1);
  37.     }
  38.     // И дальше пройдем по прямой до нужной точки. Выполнится только один из циклов ниже
  39.     while (x1 != x2)
  40.     {
  41.         x1 += stepX;
  42.         printf("x=%d y=%d\n", x1, y1);
  43.     }
  44.     while (y1 != y2)
  45.     {
  46.         y1 += stepY;
  47.         printf("x=%d y=%d\n", x1, y1);
  48.     }
  49.     return 0;
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement