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

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

Восстановить пароль Регистрация
 
dmital
 Аватар для dmital
1 / 1 / 0
Регистрация: 18.02.2011
Сообщений: 20
17.08.2011, 12:31     Расчет краски на лабиринт #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
#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, как и требуется в задаче.

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

Лабиринт C++
C++ Лабиринт
Лабиринт C++
C++ лабиринт
Лабиринт с++ C++
Лабиринт C++
Лабиринт C++ C++
Лабиринт C++
C++ лабиринт
Хватит ли краски строителю для покраски сцены C++
C++ Рассчитать количество краски для покраски прямоугольника
Сколько краски будет потрачено на покраску каждой из поверхностей C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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;
}
Миниатюры
Расчет краски на лабиринт  
-=ЮрА=-
Заблокирован
Автор 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];
dmital
 Аватар для dmital
1 / 1 / 0
Регистрация: 18.02.2011
Сообщений: 20
17.08.2011, 13:11  [ТС]     Расчет краски на лабиринт #4
Благодарю за ответ.
Yandex
Объявления
17.08.2011, 13:11     Расчет краски на лабиринт
Ответ Создать тему
Опции темы

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