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

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

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

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.10.2012, 23:02     Игра с фишками. Что не так в моем коде?
Посмотрите здесь:

C++ что в коде не так?
C++ Подскажите что не в моем коде(Сортировка слиянием)
Что не так в моем коде? C++
что в коде не так? C++
C++ Подскажите, что мне надо поменять в моем коде, чтобы найти сумму по столбцам?
ЧТо не так в коде? C++
Что не так в коде? C++
C++ Что не так в коде?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 07:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru