Sərhəd#2507

Sərhəd (Həll təhlili)

Düzbucaqlı ərazini simvol massivinə yerləşdirək. elementinə baxaq. Əgər o, s[i + 1][j] elementindən fərqlənirsə, deməli, onların arasında uzunluğu olan sərhəd keçir (yəni -in altında sərhəd var).

Oxşar şəkildə, əgər elementi s[i][j + 1] elementindən fərqlənirsə, onların arasında da uzunluğu olan sərhəd keçir (-in sağında sərhəd var).

Qalan iş bütün mövqelərini gəzmək və hər biri üçün alt və sağ sərhədlərin sayını hesablamaqdır.

Nümunə

Dövlətlər arasındakı sərhəd qırmızı rənglə göstərilib. Onun uzunluğu -ə bərabərdir.

Alqoritmin realizasiyası

Dövlətlərin ərazilərini massivində saxlayırıq.

#define MAX 110
char s[MAX][MAX];

Giriş məlumatlarını oxuyuruq.

scanf("%d %d\n", &w, &h);
for (i = 0; i < h; i++)
  gets(s[i]);

Şaquli sərhədlərin uzunluğunu hesablayırıq.

for (i = 0; i < h; i++)
for (j = 0; j < w - 1; j++)
  if (s[i][j] != s[i][j + 1]) res++;

Üfüqi sərhədlərin uzunluğunu hesablayırıq.

for (i = 0; i < h - 1; i++)
for (j = 0; j < w; j++)
  if (s[i][j] != s[i + 1][j]) res++;

Cavabı çıxarırıq.

printf("%d\n", res);

Alqoritmin realizasiyası – string

Dövlətlərin ərazilərini massivində saxlayırıq.

vector<string> s;

Giriş məlumatlarını oxuyuruq.

cin >> w >> h;
s.resize(h);
for (i = 0; i < h; i++)
  cin >> s[i];

Şaquli sərhədlərin uzunluğunu hesablayırıq.

for(i = 0; i < h; i++)
for(j = 0; j < w - 1; j++)
  if (s[i][j] != s[i][j+1]) res++;

Üfüqi sərhədlərin uzunluğunu hesablayırıq.

for(i = 0; i < h - 1; i++)
for(j = 0; j < w; j++)
  if (s[i][j] != s[i+1][j]) res++;

Cavabı çıxarırıq.

cout << res << endl;