fizord.ru - статьи - 63
[главная] | [каталоги]

0
создан: 2015-11-02 23:39:16
пользователь: cloud раздел: программирование
[20025]
ход конём c++
ход конём c++
Исаков Андрей Алексеевич vk.com/cl0oud

// ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <time.h>

using namespace std;

#define move_types 8

int possible_moves[move_types][2] = {
     { -1, -2 }, { -2, -1 }, { -2, 1 }, { 1, -2 },
     { -1, 2 }, { 2, -1 }, { 1, 2 }, { 2, 1 }
};

int **global;
int size_x, size_y;
int max_moves, back_ret;


/*Функция проверяет может ли быть сделан ход на клетку с координатами x,y*/
int move_possible(int x, int y)
{
     return x >= 0 && y >= 0 && x < size_x && y < size_y && global[x][y] == 0;
}


int find_path(int cur_x, int cur_y, int move_num)
{
     int next_x = 0, next_y = 0;
     global[cur_x][cur_y] = move_num;

     if (move_num > max_moves)
          return 1;

     for (int i = 0; i < move_types; i++)
     {
          next_x = cur_x + possible_moves[i][0];
          next_y = cur_y + possible_moves[i][1];
          if (move_possible(next_x, next_y) && find_path(next_x, next_y, move_num + 1))
               return 1;
     }

     global[cur_x][cur_y] = 0;
     back_ret++;
     move_num++;
     //return 0;
}



/*главная функция*/
void main()
{
     setlocale(LC_ALL, "");

     int i, nrows, ncols, sy, sx, **desc = NULL;
     time_t start, end;
     
     //вводим данные
     cout << "Введите размерность доски (от 2 до 8) :" << endl
          << "по оси "X"     "; cin >> size_x;
     cout << "по оси "Y"     "; cin >> size_y;
     if (size_x>8 || size_x<2 || size_y>8 || size_y<2)
     {
          cout << "Неверный размер"; system("pause"); return;
     }
     
     //проверяем размерность
     cout << "Введите начальные координаты:" << endl
          << "Координата по оси"X"     "; cin >> sx;
     cout << "Координата ...
загрузить
ещё

fizord.ru © 2024