Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Расчет краски на лабиринт - C++

17.08.2011, 12:31. Просмотров 320. Ответов 3
Метки нет (Все метки)

Условие задачи тут

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
#include <iostream>
using namespace std;
void paint(int i, int j) {
 if (a[i][j]=='.') {
a[i][j]='$';
paint(i+1,j);
paint(i-1,j);
paint(i,j+1);
paint(i,j-1);
}
}
int nhood(int s, int n, int m) {
if (a[n+1][m]=='#') s++;
if (a[n-1][m]=='#') s++;
if (a[n][m+1]=='#') s++;
if (a[n][m-1]=='#') s++;
return s;
}
int main() {
int n,i,j,s=0;
cin>>n;
char a[n+2][n+2];
for (i=0;i<=n+1; i++)
 for (j=0; j<=n+1; j++)
  a[i][j]='#';
for (i=1; i<=n; i++) 
 for (j=1; j<=n; j++)
 cin>>a[i][j];
paint(1,1);
paint(n,n);
for(i=1; i<=n; i++)
 for(j=1; j<=n; j++)
   if (a[i][j]=='$')
     nhood(s,i,j);
cout<<s*9-4;
    
return 0;
}
Сначала заполняю массив размера n+2*n+2 препятствиями, потом записываю в него входные данные. После этого нахожу 4-связные области с помощью функции paint, применяя ее к первой и последней клеткам. Когда области найдены, нахожу количество стен, которые нужно покрасить, для этого нахожу все пары область-стена. При выводе умножаю количество стен на 9 и вычитаю 4, как и требуется в задаче.

Прошу подсказать, что нужно исправить, чтобы функции корректно работали.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2011, 12:31
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Расчет краски на лабиринт (C++):

Хватит ли краски строителю для покраски сцены - C++
Строителю предстоит покрасить сцену круглой формы, диаметр которой можно измерить рулеткой. Спросите сколько у него в наличии краски и...

Рассчитать количество краски для покраски прямоугольника - C++
Доброе время суток! Ребята, подскажите в чем загвостка! Первую задачу решил правильно, на второй завис! (Хотя такая же, только...

Сколько краски будет потрачено на покраску каждой из поверхностей - C++
Доброе время суток! Помогите решить задачу, не могу понять, где ошибка! #include&lt;iostream&gt; using namespace std; void main() ...

Расчет сумм в формуле и расчет xi должны быть оформлены в виде отдельных функций. - C++
День добрый товарищи специалисты, помогите пожалуйста с примером m=((1/n)*\sum_{i=1}^{n}{x}_{i}){}^{2}-\sum_{i=1}^{n}{x}_{i} ,n=5 ф-ция...

Лабиринт - C++
Вообщем у меня 2 проблемы: 1) Либирнт генерирует 2 раза 2) '8' ходит как хочит Поправте плз код #include &lt;iostream&gt; #include...

лабиринт - C++
Коридорами лабиринта разрешается двигаться только в направлениях, указанных стрелками. Человек вошел в комнату A и, выбирая случайным...

3
-=ЮрА=-
Заблокирован
Автор FAQ
17.08.2011, 13:05 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от dmital Посмотреть сообщение
рошу подсказать, что нужно исправить, чтобы функции корректно работали.
Цитата Сообщение от dmital Посмотреть сообщение
paint(int i, int j)
- в функцию нет передачи массива, если бы ты объявил массив а как глобальный вначале тогда можно было его не передавать в функцию, он косвенно в неё передавался. Те переменные которые ты прописал внутри тела функциик внешним блокам программы отношения не имеют (хотя могут иметь сходные имена), сейчас подправлю...

Добавлено через 9 минут
Правильность твоего алгоритма не проверял, скрин работы прилагаю
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
#include <iostream>
using namespace std;
 
void paint(int i, int j, char ** a) 
{
    if (a[i][j]=='.') 
    {
        a[i][j]='$';
        paint(i+1,j,a);
        paint(i-1,j,a);
        paint(i,j+1,a);
        paint(i,j-1,a);
    }
}
 
int nhood(int s, int n, int m, char **a) 
{
    if (a[n+1][m]=='#') s++;
    if (a[n-1][m]=='#') s++;
    if (a[n][m+1]=='#') s++;
    if (a[n][m-1]=='#') s++;
    return s;
}
 
int main() 
{
    int n,i,j,s=0;
    cout<<"Enter n ";cin>>n;
    char **a = new char *[n+2];
    for (i=0;i<=n+1; i++)
    {
        a[i] = new char[n+2];
        for (j=0; j<=n+1; j++)
            a[i][j]='#';
    }
    for (i=1; i<=n; i++) 
    {
        for (j=1; j<=n; j++)
        {
            cout<<"a["<<i<<"]["<<j<<"] = "; 
            cin>>a[i][j];
        }
        cout<<"\r\n";
    }
    paint(1,1,a);
    paint(n,n,a);
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            if (a[i][j]=='$')
                nhood(s,i,j,a);
    cout<<s*9-4;
    return 0;
}
1
Миниатюры
Расчет краски на лабиринт  
-=ЮрА=-
Заблокирован
Автор FAQ
17.08.2011, 13:08 #3
также была проблемма здесь
Цитата Сообщение от dmital Посмотреть сообщение
cin>>n;
char a[n+2][n+2];
- так память под массив символов не выделяют, посмотри в программе как это можно реализовывать
C++
1
2
3
4
char **a = new char *[n+2];
        for (i=0;i<=n+1; i++)
        {
                a[i] = new char[n+2];
1
dmital
1 / 1 / 0
Регистрация: 18.02.2011
Сообщений: 20
17.08.2011, 13:11  [ТС] #4
Благодарю за ответ.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2011, 13:11
Привет! Вот еще темы с ответами:

Лабиринт - C++
Помогите, пожалуйста, нарисовать лабиринт на всю консоль, чтобы смайлик двигался по лабиринту (лабиринт в виде двумерного массива)

Лабиринт C++ - C++
я написал код лабиринта на c++, с помощью чего можно найти кратчайший путь выхода из лабиринта? #include &lt;iostream&gt; #include...

Лабиринт - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;conio.h&gt; #include &lt;time.h&gt; #include &lt;cmath&gt; #include &lt;stdio.h&gt; using...

Лабиринт - C++
Помогите пожалуйста: Создать игру «Лабиринт». Игра состоит из 2 уровней (лабиринтов), отличающихся по сложности. Лабиринты появляются...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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