Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 07.09.2011
Сообщений: 8
1

Из листа клетчатой бумаги N*N вырезали М клеток, на сколько кусков распадается оставшаяся часть листа?

20.10.2011, 11:49. Показов 4999. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
условие:из листа клетчатой бумаги N*N клеток вырезали М клеток . на сколько кусков распадается оставшаяся часть листа?

Первая строка входного файла содержит два натуральных числа N и M(N<=101 , M<= N*N <= 101)
далее идут М строк в каждой из которых координаты вырезаных клеток -номер строки х и номер столбца у.


он почемуто не работает:



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
#include<iostream>
#include<string>
using namespace std;
int chislo=0;
int main(){
    int pole[102][102];
    int n,m;
    cin >> n >> m;
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            pole[i][j]=0;
        }
    }
 
    for(int i=0;i<m;i++){
        int x,y;
        cin >> x >> y;
        pole[x+1][y+1]=666;
    }
    for(int i=n+1;i<102;i++){
        for(int j=n+1;j<102;j++){
            pole[i][j]=666;
        }
    }
    for(int i=1;i<n+1;i++){
        for(int j=1;j<n+1;j++){
            //if(pole[i][j]==0){
            //  pole[i][j]=chislo;
            //  pole[i][j+1]= pole[i][j+1]==0 ? chislo : pole[i][j+1];
            //  pole[i][j-1]= pole[i][j-1]==0 ? chislo : pole[i][j-1];
            //  pole[i+1][j]= pole[i+1][j]==0 ? chislo : pole[i+1][j];
            //  pole[i-1][j]= pole[i-1][j]==0 ? chislo : pole[i-1][j];
            //  if(pole[i][j+1]!=0 && pole[i][j-1]!=0 && pole[i+1][j]!=0 && pole[i-1][j]!=0)chislo++;
            //}
            if(pole[i][j]==chislo){
                if(pole[i][j+1])pole[i][j+1]=chislo;
                if(pole[i][j-1])pole[i][j-1]=chislo;
                if(pole[i+1][j])pole[i+1][j]=chislo;
                if(pole[i-1][j])pole[i-1][j]=chislo;
                if(pole[i][j+1]!=0 && pole[i][j-1]!=0 && pole[i+1][j]!=0 && pole[i-1][j]!=0)chislo++;
            }
        }
    }
    cout << chislo;
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2011, 11:49
Ответы с готовыми решениями:

Списки, Стеки,Очереди (На сколько кусков распадется оставшаяся часть листа? )
Доброго всем времени суток!! Помогите написать программу: Из листа клетчатой бумаги размером М*N...

Создать программу (Подсчитать, на сколько кусков распадется оставшаяся часть листа).
Из листа клетчатой бумаги размером M*K клеток удалили некоторые клетки. Подсчитать, на сколько...

Из листа клетчатой бумаги размером М*Н клеток удалили некоторые клетки. На сколько кусков распадется оставшаяся часть листа?
Срочно нужна помощь в выполнении данной задачи, т.к. в Паскале я полный 0. кому не сложно и есть...

Из листа клетчатой бумаги размером M умножить N клеток удалили некоторые клетки
Из листа клетчатой бумаги размером m * N клеток удалили некоторые клетки. На сколько кусков...

1
Эксперт С++
4727 / 2548 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
20.10.2011, 12:32 2
Цитата Сообщение от danzel1 Посмотреть сообщение
он почемуто не работает:
См комментарии:
Цитата Сообщение от danzel1 Посмотреть сообщение
for(int i=0;i<m;i++){
int x,y;
cin >> x >> y;
pole[x+1][y+1]=666;// наверное имелось ввиду: pole[x-1][y-1]=666; обычно в таких задачах нумерация строк и столбцов начинается с 1

тогда это:
Цитата Сообщение от danzel1 Посмотреть сообщение
for(int i=n+1;i<102;i++){
for(int j=n+1;j<102;j++){
pole[i][j]=666;
}
переделывается так:
C++
1
2
3
4
5
        for(int i=n;i<102;i++){
                for(int j=n;j<102;j++){
                        pole[i][j]=666;
                }
        }
А вот это:
Цитата Сообщение от danzel1 Посмотреть сообщение
for(int i=1;i<n+1;i++){
for(int j=1;j<n+1;j++){
//if(pole[i][j]==0){
// pole[i][j]=chislo;
// pole[i][j+1]= pole[i][j+1]==0 ? chislo : pole[i][j+1];
// pole[i][j-1]= pole[i][j-1]==0 ? chislo : pole[i][j-1];
// pole[i+1][j]= pole[i+1][j]==0 ? chislo : pole[i+1][j];
// pole[i-1][j]= pole[i-1][j]==0 ? chislo : pole[i-1][j];
// if(pole[i][j+1]!=0 && pole[i][j-1]!=0 && pole[i+1][j]!=0 && pole[i-1][j]!=0)chislo++;
//}
if(pole[i][j]==chislo){
if(pole[i][j+1])pole[i][j+1]=chislo;
if(pole[i][j-1])pole[i][j-1]=chislo;
if(pole[i+1][j])pole[i+1][j]=chislo;
if(pole[i-1][j])pole[i-1][j]=chislo;
if(pole[i][j+1]!=0 && pole[i][j-1]!=0 && pole[i+1][j]!=0 && pole[i-1][j]!=0)chislo++;
}
}
}
совсем не правильно. Внимательно посмотрите - я даже не тестировал Ваш код, но вижу, что после таких циклов chislo всегда останется равным 0. Вам здесь подойдет поиск в ширину лучше с использованием очереди.
Делаете цикл while() в котором ищете любой элемент равный 0 (если не находите, то выходите из цикла). Найденный элемент добавляете в очередь и помечаете его например тем же значением 666. Затем во внутреннем цикле добавляете в очередь все элементы рядом с начальным в очереди равные 0 (не забывая их тоже помечать). Как только очередь закончилась, то chislo++;
0
20.10.2011, 12:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.10.2011, 12:32
Помогаю со студенческими работами здесь

На сколько кусков распадется часть листа, если из него вырезать некоторые клетки? Есть алгоритм.
Из листа клетчатой бумаги размером М*N клеток удалили некоторые клетки. На сколько кусков...

Определить на сколько кусков распадётся клетчатый лист при удалаении заданных клеток
Из прямоугольного листа клетчатой бумаги (N строк, M столбцов) удалили некоторые клетки. На сколько...

Из листа бумаги со сторонами a и b свернуть коробочку с максимальным объемом.
Из прямоугольного листа бумаги со сторонами a и b надо свернуть коробочку с максимальной площадью,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru