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

Игра с фишками. Что не так в моем коде? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Удаление символа в строке http://www.cyberforum.ru/cpp-beginners/thread671319.html
Помогите пожалуйста, вот программа: #include <iostream> using namespace std; int main() { int k; cin >> k; int a=0;
C++ Поиск минимума методом трихотомии Здравствуйте! Написал, но почему-то не работает. Подскажите пожалуйста что тут не так? Метод трихотомии - деление на три, аналог метода дихотомии (деление на два). Или то что я нахожу f1 и f2 - уже не правильно? #include <conio.h> #include <math.h> #include <iostream> using namespace std; double f(double x) { http://www.cyberforum.ru/cpp-beginners/thread671290.html
Как удалить символ через cout? C++
Собственно вся суть изложена в названии темы. Я слышал, что через cout << '' можно удалить один символ. Там нужно cout << '\какая-то буква'. Подскажите эту "какую-то" букву. Всё, проблема решена, не знаю как удалить тему.
Программирование типовых числовых задач обработки одномерных массивов C++
1) Вычислить и запомнить в структуре одномерного массива (таблица 1) фиксированное количество элементов числовой последовательности, заданной рекуррентным выражением; 2)Найти минимальный элемент последовательности и его номер; 3)Найти максимальный элемент последовательности и его номер; 4)Вычислить сумму элементов последовательности; 5)Вычислить произведение элементов последовательности;...
C++ Объявление переменной, после ввода её имени с клавиатуры http://www.cyberforum.ru/cpp-beginners/thread671259.html
необходимо, чтобы пользователь имел возможность задавать свои имена переменных. А вообще требуется для создания множества с определённым именем в виде линейного списка.
C++ Шаблоны с переменным числом аргументов Написал шаблон функции с переменным числом аргументов которая считает сумму своих аргументов. Практики по этому вопросу не имею, поэтому возник вопрос - правильно ли написано или это все можно сделать как то по проще, можно ли обойтись без статической переменной? Вот код:#include <iostream> using namespace std; static long double sum = 0; template <class T> long double sum_values(const... подробнее

Показать сообщение отдельно
NeRRouZ
 Аватар для NeRRouZ
4 / 4 / 0
Регистрация: 19.12.2010
Сообщений: 54
14.10.2012, 23:02     Игра с фишками. Что не так в моем коде?
Важной частью игры является проверка того, что можно ли соединить две фишки путем, удовлетворяющим следующим свойствам:

1) Путь должен состоять из отрезков вертикальных и горизонтальных прямых.

2) Путь не должен пересекать других фишек. При этом часть пути может оказаться вне доски.

X - означает, что клетка занята фишкой.
. (точка) - означает, что клетка пустая.

Фишки с координатами (1,3) и (4,4) могут быть соединены. Фишки с координатами (2,3) и (5,3) тоже могут быть соединены. А вот фишки с координатами (2,3) и (3,4) соединить нельзя – любой соединяющий их путь пересекает другие фишки.

Пример входных данных:
XXXXX
X...X
XXX.X
.XXX.
2 3 5 3
1 3 4 4
2 3 3 4
0 0 0 0 // означает выйти из программы
Выход:
5
6
0

По моему алгоритму: помечаем фишку с координатами x1,y1 = 2, затем смотрю есть ли рядом с фишкой нулевая клетка, если есть ставлю туда 4, и вместо 2 записываю 3. И повторяю алгоритм пока не дойду до клетки с координатами x2,y2 и вывожу путь; если нет такого пути - пишу ноль.

Но программа неправильно работает, она считает путь до двойки(то есть count становится равным 2, а потом ему присваивается значение 0). Не пойму в чем дело, помогите.

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    int w, h, a[79][79] = {0};
    char c;
    cin >> w >> h; // ширина и высота поля
    int i,j;
    int x1, x2, y1, y2; //координаты фишек
    int count = 0; // путь
    bool f = true;
    
    for (i=0; i<h; i++) // считываю поле
    {
        for (j=0; j<w; j++)
        {   cin>>c;
            
            if (tolower(c) == 'x') 
                a[i+1][j+1] = 1;
 
        }
    }
 
    
    do 
    {
        cin >> x1 >> y1 >> x2 >> y2;
        if (x1 == 0)
            return 0;
        x1++, x2++, y1++, y2++;
        
        a[x1][y1] = 2;
        a[x2][y2] = 0;
        count = 0;
        while (1)
        {
            count++;
            //cout<<count<<endl;
            f = true;
            
            for (i=1; i<w+3; i++)
                for(j=1; j<h+3; j++)
                    if(a[i][j] == 2)
                    {
                        if (a[i+1][j] == 0)
                            a[i+1][j] = 4;
                            
                        if (a[i-1][j] == 0)
                            a[i-1][j] = 4;
                            
                        if (a[i][j+1] == 0)
                            a[i][j+1] = 4;
                            
                        if (a[i][j-1] == 0)
                            a[i][j-1] = 4;
                        
                        a[i][j] = 3;
                        f = false;
                    }
    
            if (f) 
            {
                cout << 0 << endl;
                break;
            }
        }
                                            
        for (i=1; i<w+3; i++)
                for(j=1; j<h+3; j++)
                    if(a[i][j] == 4)
                        a[i][j] = 2;
                        
            if(a[x2][y2] == 2)
                {
                    cout << count << endl;
                    break;
            }
        a[x1][y1] = 1;
        a[x2][y2] = 1;
 
            
        for (i=1; i<w+3; i++)
            for(j=1; j<h+3; j++)
                if(a[i][j] != 1)
                    a[i][j] = 0;
                    
    } while (1);
    
    
    return 0;
}
Добавлено через 16 минут
А, все я понял))))) ошибка была в том, что неправильно стояла скобка '}'

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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    int w, h, a[79][79] = {0};
    char c;
    cin >> w >> h; // shirina i visota
    int i,j;
    int x1, x2, y1, y2;
    int count = 0;
    bool f = true;
    
    for (i=0; i<h; i++)
    {
        for (j=0; j<w; j++)
        {   cin>>c;
            
            if (tolower(c) == 'x')
                a[j+2][i+2] = 1;
 
        }
    }
 
    
    do 
    {
        cin >> x1 >> y1 >> x2 >> y2;
        if (x1 == 0)
            return 0;
        x1++, x2++, y1++, y2++;
        
        a[x1][y1] = 2;
        a[x2][y2] = 0;
        count = 0;
        while (1)
        {
            count++;
            cout<<count<<endl;
            f = true;
            
            for (i=1; i<w+3; i++)
                for(j=1; j<h+3; j++)
                    if(a[i][j] == 2)
                    {
                        if (a[i+1][j] == 0)
                            a[i+1][j] = 4;
                            
                        if (a[i-1][j] == 0)
                            a[i-1][j] = 4;
                            
                        if (a[i][j+1] == 0)
                            a[i][j+1] = 4;
                            
                        if (a[i][j-1] == 0)
                            a[i][j-1] = 4;
                        
                        a[i][j] = 3;
                        f = false;
                    }
    
            if (f) 
            {
                cout << 0 << endl;
                break;
            }
        // Не Здесь!
                                            
            for (i=1; i<w+3; i++)
                for(j=1; j<h+3; j++)
                    if(a[i][j] == 4)
                        a[i][j] = 2;
        
            if(a[x2][y2] == 2)
            {
                    cout << count << endl;
                    break;
            }
        }//вот здесь нада было поставить
        a[x1][y1] = 1;
        a[x2][y2] = 1;
 
            
        for (i=1; i<w+3; i++)
            for(j=1; j<h+3; j++)
                if(a[i][j] != 1)
                    a[i][j] = 0;
                    
    } while (1);
    
    
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru