Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

graycrow



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Код:
 
#include <stdio.h>
 
const int size = 8; // размер доски
 
int table[size*size]; // соственно сама доска
 
int point[2] = {0,1}, // точка, куда должен попасть конь
    knightPos[2] = {4,2}, // начальная позиция коня
    moves = 0;  // сколько шагов нужно
 
void initTable(int* table, int size, int p[2]); // сначала таблица "не хожена", кроме точки
void movesKnight(int* table, int size); // сделать ходы из всех "хоженных" точек
int checkPass(int* table, int size, int kP[2]); // проверить, если путь пройден
void showBoard(int* table, int size);   // показать доску
 
int main()
{
    initTable(table, size, point);
    do
    {
        movesKnight(table, size);
    }
    while(checkPass(table, size, knightPos) == -1);
     
    showBoard(table, size);
    printf("\nresult = %d", moves);
    return 0;
}
 
void initTable(int* table, int size, int p[2])
{
    int i, j;
    for(i = 0; i < size; i++)
    {
        for(j = 0; j < size; j++)
        {
            table[i*size + j] = -1;
        }
    }
    table[p[0]*size + p[1]] = 0;
}
 
void movesKnight(int* table, int size)
{
    int i, j;
    for(i = 0; i < size; i++)
    {
        for(j = 0; j < size; j++)
        {
            if(table[i*size + j] == moves)
            {
                if(i+1 < 8 && j+2 < 8 && table[(i+1)*size + (j+2)] == -1)
                {
                    table[(i+1)*size + (j+2)] = moves+1;
                }
                if(i+2 < 8 && j+1 < 8 && table[(i+2)*size + (j+1)] == -1)
                {
                    table[(i+2)*size + (j+1)] = moves+1;
                }
                if(i+1 < 8 && j-2 >= 0 && table[(i+1)*size + (j-2)] == -1)
                {
                    table[(i+1)*size + (j-2)] = moves+1;
                }
                if(i-1 >= 0 && j+2 < 8 && table[(i-1)*size + (j+2)] == -1)
                {
                    table[(i-1)*size + (j+2)] = moves+1;
                }
                if(i+2 < 8 && j-1 >= 0 && table[(i+2)*size + (j-1)] == -1)
                {
                    table[(i+2)*size + (j-1)] = moves+1;
                }
                if(i-1 >= 0 && j-2 >=0 && table[(i-1)*size + (j-2)] == -1)
                {
                    table[(i-1)*size + (j-2)] = moves+1;
                }
                if(i-2 >= 0 && j+1 < 8 && table[(i-2)*size + (j+1)] == -1)
                {
                    table[(i-2)*size + (j+1)] = moves+1;
                }
                if(i-2 >= 0 && j-1 >= 0 && table[(i-2)*size + (j-1)] == -1)
                {
                    table[(i-2)*size + (j-1)] = moves+1;
                }
            }
        }
    }  
    moves++;    
}
 
int checkPass(int* table, int size, int kP[2])
{
    return table[kP[0]*size + kP[1]];
}
 
void showBoard(int* table, int size)
{
    int i, j;
    for(i = 0; i < size; i++)
    {
        for(j = 0; j < size; j++)
        {
            printf("%3d", table[i*size + j]);
        }
        printf("\n");
    }
}
 

Всего записей: 314 | Зарегистр. 08-06-2005 | Отправлено: 11:30 29-11-2007
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru