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;