Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Grafiny
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 4
#1

Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода - C++

24.04.2012, 19:07. Просмотров 809. Ответов 2
Метки нет (Все метки)

Поле шахмотной доски определяеся парой натуральных чисел, каждая из которых не превосходит восьми: первое число номер вертикали (при счете слева на права), второе-номер (при счете снизу вверх). даны натуральные числа k,l,m,n каждое из которых не превосходит восьми.

Требуется: выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода(указать поле на которое проводит первый ход)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2012, 19:07     Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода
Посмотрите здесь:
Выяснить, можно ли с заданного поля одним ходом слона попасть на другое заданное поле C++
C++ Проверить можно ли ходом короля из одной клетки попасть в другую
C++ Существует указатель p. Можно ли выяснить, содержит он адрес допустимого значения или нет
C++ как можно сделать это? если вообще возможно (не задача)
C++ Выяснить, можно ли из строки st1 сделать строку st2 путем перестановки символов
C++ Определить может ли конь попасть с первой клетки на вторую одним ходом?
C++ Определить, может ли ладья попасть с первой клетки на вторую одним ходом
Определить, может ли король попасть с первой заданной клетки на вторую одним ходом C++
Определить, может ли король попасть с первой заданной клетки на вторую одним ходом (шахматы) C++
C++ Друзья, подскажите, говорят, что можно поля класса инициализировать в момент объявления класса. Как это сделать?
Определить сможет ли белый слон расположенный на поле (a,b),одним ходом пойти на поле (e,f),не попав при этом под удар чёрного коня нах.(c,d) C++
C++ Известны углы α и β у основания. Выяснить, если это возможно, тип трапеции

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
25.04.2012, 05:44     Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <iostream>
using namespace std;
int k,l,m,n;
struct tt{
    int x,y,t;
};
tt Q[65], a[8][8];
int main()
{
    cin>>k>>l>>m>>n;
    int i,j, i_st=0,i_end=1;
    for(i=0; i<8; i++)
        for(j=0; j<8; j++)
            a[i][j].t=0;
    Q[0].x=k-1; Q[0].y=l-1; 
    while(i_st<i_end)
    {
        for(i=1; i+Q[i_st].x<8 && i+Q[i_st].y<8; i++)
            if(a[Q[i_st].x+i][Q[i_st].y+i].t==0)
            {
                a[Q[i_st].x+i][Q[i_st].y+i].t=a[Q[i_st].x][Q[i_st].y].t+1;
                a[Q[i_st].x+i][Q[i_st].y+i].x=Q[i_st].x;
                a[Q[i_st].x+i][Q[i_st].y+i].y=Q[i_st].y;
                Q[i_end].x=Q[i_st].x+i; Q[i_end++].y=Q[i_st].y+i; 
            }
        for(i=1; Q[i_st].x-i>=0 && i+Q[i_st].y<8; i++)
            if(a[Q[i_st].x-i][Q[i_st].y+i].t==0)
            {
                a[Q[i_st].x-i][Q[i_st].y+i].t=a[Q[i_st].x][Q[i_st].y].t+1;
                a[Q[i_st].x-i][Q[i_st].y+i].x=Q[i_st].x;
                a[Q[i_st].x-i][Q[i_st].y+i].y=Q[i_st].y;
                Q[i_end].x=Q[i_st].x-i; Q[i_end++].y=Q[i_st].y+i; 
            }
        for(i=1; i+Q[i_st].x<8 && Q[i_st].y-i>=0; i++)
            if(a[Q[i_st].x+i][Q[i_st].y-i].t==0)
            {
                a[Q[i_st].x+i][Q[i_st].y-i].t=a[Q[i_st].x][Q[i_st].y].t+1;
                a[Q[i_st].x+i][Q[i_st].y-i].x=Q[i_st].x;
                a[Q[i_st].x+i][Q[i_st].y-i].y=Q[i_st].y;
                Q[i_end].x=Q[i_st].x+i; Q[i_end++].y=Q[i_st].y-i; 
            }
        for(i=1; Q[i_st].x-i>=0 && Q[i_st].y-i>=0; i++)
            if(a[Q[i_st].x-i][Q[i_st].y-i].t==0)
            {
                a[Q[i_st].x-i][Q[i_st].y-i].t=a[Q[i_st].x][Q[i_st].y].t+1;
                a[Q[i_st].x-i][Q[i_st].y-i].x=Q[i_st].x;
                a[Q[i_st].x-i][Q[i_st].y-i].y=Q[i_st].y;
                Q[i_end].x=Q[i_st].x-i; Q[i_end++].y=Q[i_st].y-i; 
            }
        i_st++;
    }
    if(a[m-1][n-1].t==1)
        cout<<"1 step"<<endl;
    else
        cout<<"2 step"<<endl<<a[m-1][n-1].x+1<<" "<<a[m-1][n-1].y+1<<endl;
    return 0;
}
Grafiny
0 / 0 / 0
Регистрация: 24.04.2012
Сообщений: 4
25.04.2012, 12:33  [ТС]     Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода #3
пасибочки* большое)))
Yandex
Объявления
25.04.2012, 12:33     Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru