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

Из листа клетчатой бумаги размером MXN клеток удалили некоторые клетки. На какое количество кусков распадется оставшаяся часть листа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ опрос кода клавиши для остановки бесконечного цикла http://www.cyberforum.ru/cpp-beginners/thread29139.html
Доброй ночи. Курсовая работа на тему создания справочника по резисторам. Пытаюсь писать по кускам. фрагмент программы: #include<iostream.h> #include<conio.h> struct sprav{ char tip; char power; int temp; char diap; char gab; };
C++ Найти 100 первых простых чисел. Простые, это те, которые делятся только на себя и на 1 :) http://www.cyberforum.ru/cpp-beginners/thread29128.html
Путь в лабиринте C++
В общем задача звучит так:Дан лабиринт 8х8 пользователь вводит координаты старта и финиша из командной строки.Необходимо найти кратчайший путь если такой имеется и заполнить его *.В элементы массива с координатами старта и финиша записать 'S' и 'F' соответственно. Просьба опишите волновой алгоритм или дайте ссылку на какой-нибудь понятный для новичка ресурс. P.S. Сам пока что написал только...
C++ Динамические переменные и массивы
Доброго вечера))) Помогите пожалуйста переделать следующую задачу на си: определить, является ли заданная матрица ортонормированной, т.е. скалярное произведение каждой пары различных строк равно нулю для следующего задания: написать программу с использованием динамических переменных, в которой данные сначала из файла считываются в память, потом обрабатываются и записываются в файл. Я не понимаю...
C++ Как узнать имя экземпляра класса? http://www.cyberforum.ru/cpp-beginners/thread29084.html
у меня есть класс polynom, я создаю его экземпляры polynom a(5), b(5), c(5); как мне программно узнать имя экземпляра класса?
C++ Найти сумму элементов 1 и 4 столбца матрицы Сижу на лабе в универе, нужен код в С++, найти сумму элементов 1 и 4 столбца двумерного массива 5x6. Очень выручите!!! подробнее

Показать сообщение отдельно
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782

Из листа клетчатой бумаги размером MXN клеток удалили некоторые клетки. На какое количество кусков распадется оставшаяся часть листа - C++

08.04.2009, 02:04. Просмотров 1393. Ответов 0
Метки (Все метки)

Помогите, пожалуйстанайти ошибку в задаче:
Из листа клетчатой бумаги размером MXN клеток удалили некоторые клетки. На какое количество кусков распадется оставшаяся часть листа.
Я реализовал с помощью циклической очереди. Алгоритм такой: пользователь вводит размеры mхn, и мы заполняем матрицу размерами m+2 на n+2 нулями, а границы (-1), долее пользователь вводит количество и значения вырезанных клеток, их так же помечаем (-1). Проходим матрицу, если значение = 0, пишем туда значение count = 1, если соседние клетки равны 0, их помещаем в очередь и тоже помечаем значением count. Затем, пока очередь не пуста, проверяем клетки в очереди на равенство с 0 и помечаем. Затем сделать count++. И так пока не пройдём всю матрицу.
Значение count – 1 и будет ответом.
Программа выдаёт неверный результат. Никак не могу найти ошибку.
Буду очень благодарен, если вы поможете!

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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
#include <iostream>
 
struct cell
{
    int x;
    int y;
};
 
class Queue
{
public:
    Queue (int n)
    {
        itsCount = n;
        itsCell = new cell [itsCount+1];
        itsFront = itsRear = 0;
    }
    ~Queue ()
    {
        delete [] itsCell;
        itsCell = NULL;
        itsCount = itsFront = itsRear = 0;
    }
 
    int GetItsFront () const
    {
        return itsFront;
    }
 
    int GetItsRear () const
    {
        return itsRear;
    }
 
    void Push (cell& c)
    {
        if ((itsRear + 1 == itsFront) || ((itsRear == itsCount) && (itsFront == 0)))
            throw "Full";
        itsCell [itsRear++] = c;
        if (itsRear > itsCount)
            itsRear = 0;
    }
 
    cell Pop ()
    {
        if (itsRear == itsFront)
            throw "Empty";
        cell k;
        k = itsCell [itsFront++];
        if (itsFront > itsCount)
            itsFront = 0;
        return k;
    }
 
    bool isEmpty ()         // Возвращает истину, если списко пустой
    {
        if (itsRear == itsFront)
            return true;
        else
            return false;
    }
 
    cell ViewFront ()
    {
        if (itsFront == 0)
            throw "Empty";
        return itsCell [itsFront];
    }
 
    cell ViewRear ()
    {
        if (itsRear == 0)
            throw "Empty";
        return itsCell [itsRear];
    }
 
private:
    cell* itsCell;
    int itsCount;
    int itsFront;
    int itsRear;
};
 
using std::cin;
using std::cout;
using std::endl;
 
int main ()
{
    setlocale (LC_ALL, ".1251");
    int const nmax = 50;
    int matrix [nmax][nmax];
    Queue q (100);
    cell cTmp;
 
    int m, n, i, j, k, l, count, x;
    cout << "Введите размеры матрицы nxm\n";
    cin >> n >> m;
 
    for (i = 0; i < n + 2; i++)
        for (j = 0; j < m + 2; j++)
            matrix [i] [j] = 0;
    count = 1;
 
    cout << "Введите количество закрашиваемых клеток\n";
    cin >> x;
    cout << "Введите координаты клеток\n";
    while (x)
    {
        cout << "x = ";
        cin >> i;
        cout << "y = ";
        cin >> j;
        cout << endl;
        matrix [i + 1] [j + 1] = -1;
        x--;
    }
 
    // Заполняем границы числами (-1)
    for (i = 0; i < n + 2; i++)
        matrix [i] [0] = -1;
    for (i = 0; i < n + 2; i++)
        matrix [i] [n + 1] = -1;
    for (j = 0; j < m + 2; j++)
        matrix [0] [j] = -1;
    for (j = 0; j < m + 2; j++)
        matrix [m + 1] [j] = -1;
 
    bool flag = true;
    while (flag == true)
    {
        for (i = 0; i < n + 2; i++)
            for (j = 0; j < m + 2; j++)
            {
                if (matrix [i] [j] == 0)
                {
                    k = cTmp.x = i;
                    l = cTmp.y = j;
                    q.Push (cTmp);                  
                    while (!q.isEmpty ())
                    {
                        if (matrix [k+1] [l] == 0)
                        {
                            cTmp.x = k + 1; cTmp.y = l;
                            q.Push (cTmp);
                            matrix [k+1] [l] = count;
                        }
                        if (matrix [k - 1][l] == 0)
                        {
                            cTmp.x = k - 1; cTmp.y = l;
                            q.Push (cTmp);
                            matrix [k - 1][l] = count;
                        }
                        if (matrix [k] [l+1] == 0)
                        {
                            cTmp.x = k; cTmp.y = l + 1;
                            q.Push (cTmp);
                            matrix [k] [l+1] = count;
                        }
                        if (matrix [k] [l - 1] == 0)
                        {
                            cTmp.x = k; cTmp.y = l - 1;
                            q.Push (cTmp);
                            matrix [k] [l - 1] = count;
                        }
                        cTmp = q.Pop ();
                        k = cTmp.x;
                        l = cTmp.y;
                        matrix [k] [l] = count;
                    }
                }
                if ((i == n + 1) && (j == m + 1))
                    flag = false;
                count++;
            }
    }
    count--;
    cout << count;
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru