Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

Помощ с една рекурсивна задача.

Featured Replies

Задачата е следната. :

Дадена е мрежа от n x m квадратчета, като за всяко квадратче е определен цвят - бял или черен. Път ще наричаме редица от съседни във вертикално или хоризонтално направление квадратчетата с един и същ цвят. Област ще наричаме множество от квадратчета с един и същ цвят между всеки две, от които има път. Дадено е квадратче. Да се определи броят на квадратчетата от областта, в която се съдържа даденото квадратче.

Задачата мислех, че съм я решил, обаче при определени стойности ми дава грешни резултати. Изглежда, че проблемът е във функциите ver и hor, но Не мога да видя какъв е проблемът.

Аз ползвам следната матрица, при координати x = 0, y = 2, очаквайки вертикално да не участва в област, а хоризонтално да участва в област от 3 квадратчета.

0, 0, 0, 0, 1,

1, 1, 0, 0, 1,

0, 1, 0, 1, 0,

0, 1, 1, 1, 1,

0, 0, 0, 0, 1;

Ето кода:

#include <iostream>

#include <iomanip>

using namespace std;


int a[20][20];

int m, n, k;

void readarr(int, int, int a[][20]);

void writearr(int, int, int a[][20]);

int hor(int, int);

int ver(int, int);


int main()

{

	int x, y;

	cout << "Rows: ";

	cin >> n;

	cout << "Columns: ";

	cin >> m;

	cout << endl;

	cout << "Enter coordinates X & Y." << endl;

	cout << "X = ";

	cin >> x;

	cout << "Y = ";

	cin >> y;

	readarr (n, m, a);

	k = a[x][y];

	writearr (n, m, a);

	if (a[x][y+1] != k && a[x][y-1] != k)

	cout << "Kvadrat4eto s poso4enite koordinati u4astva horizontalno v oblast s 1 kvadrat4e" << endl;

	else if (a[x][y+1] != k || a[x][y-1] != k)

		 cout << "Kvadrat4eto s poso4enite koordinati ne obrazuva oblast horizontalno." << endl;

		 else if (hor(x, y) == m)

			  cout << "Kvadrat4eto s poso4enite koordinati u4astva horizontalno v oblast s " << m - 2 << " kvadrat4eta." << endl;

			  else 

			  cout << "Kvadrat4eto s poso4enite koordinati u4astva horizontalno v oblast s " << hor (x, y) << " kvadrat4eta." << endl;

	a[x][y] = k;

	if (a[x-1][y] != k && a[x+1][y] != k)  

	cout << "Kvadrat4eto s poso4enite koordinati u4astva vertikalno v oblast ot 1 kvadrat4e" << endl;   

	else if (a[x-1][y] != k || a[x+1][y] != k)

		 cout << "Kvadrat4eto s poso4enite koordinati ne obrazuva oblast vertikalno." << endl;

		 else if (ver(x, y) == n) 

			  cout << "Kvadrat4eto s poso4enite koordinati u4astva vertikalno v oblast s " << n - 2 << " kvadrat4eta." << endl;

			  else cout << "Kvadrat4eto s poso4enite koordinati u4astva vertikalno v oblast s " << ver (x, y) << " kvadrat4eta." << endl;

	system ("pause");	 

	return 0;

}



void readarr(int n, int m, int a[][20])

{

	 cout << "Vuvedete mrejata, kato '0' e bqlo, a '1' e 4erno kvadrat4e: " << endl;

	 for (int i = 0; i < n; i++)

	   for (int j = 0; j < m; j++)

	   {

		   cout << "a[" << i << "][" << j << "]=";

		   cin >> a[i][j];

	   }

}


void writearr(int n, int m, int a[][20])

{

	 cout << "MREJA: " << endl;

	 for (int i = 0; i < n; i++)

	   {for (int j = 0; j < m; j++) cout << setw(5) << a[i][j];

		cout << endl;

	   }

}  


int hor(int x, int y)

{

	if (x < 0 || x > n - 1 || y < 0 || y > m - 1) return 0;

	if (a[x][y] != k) return 0;

	a[x][y] = -1;

	return 1 + hor(x, y - 1) + hor(x, y + 1);

}


int ver(int x, int y)

{

	if (x < 0 || x > n - 1 || y < 0 || y > m - 1) return 0;

	if (a[x][y] != k) return 0;

	a[x][y] = -1;

	return 1 + ver(x - 1, y) + ver(x + 1, y);  

}

ver намира области във вертикално направление, hor в хоризонтално.

Някакви идеи? И на съвсем нов код пак ще съм доволен, макар че се съмнявам на някой да ми се занимава. :headphones:

Регистрирайте се или влезете в профила си за да коментирате

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    32%
    Дарени 315 € от нужните 1 000 €

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.