Məsələ qonşuluq matrisi ilə verilmiş yönəlməmiş qrafın analizinə gətirilir.
Təpələr qrafın təpələri, körpülər isə onların arasındakı tillər kimi qəbul edilir. Qonşuluq matrisi g[i][j] və təpələri arasında körpünün olub-olmadığını göstərir. -ci təpənin rəngi massivinin xanasında verilmişdir.
Məsələdə "pis" körpülərin sayını tapmaq tələb olunur. Əgər körpü müxtəlif rəngli iki təpəni birləşdirirsə, yəni tili üçün col[i] \ne col[j] şərti ödənirsə, o zaman körpü pis hesab olunur.
Qraf yönəlməmiş olduğundan, hər til yalnız bir dəfə nəzərə alınır, buna görə də yalnız i \i, j) cütlükləri baxılır, burada i < j-dir.
Alqoritmin realizasiyası
qonşuluq matrisini və rənglər massivini elan edək.
#define MAX 110
int g[MAX][MAX], col[MAX];Qrafın qonşuluq matrisini oxuyuruq.
scanf("%d", &n);
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
scanf("%d", &g[i][j]);Təpələrin rəngləri massivini oxuyuruq.
for (i = 0; i < n; i++)
scanf("%d", &col[i]);dəyişənində elə təpə cütlüklərinin sayını hesablayırıq ki, onların arasında körpü olsun (g[i][j] = 1) və col[i] \ne col[j] şərti ödənsin.
res = 0;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if ((g[i][j] == 1) && (col[i] != col[j])) res++;Eyni cütlüyün iki dəfə (həm , həm də kimi) nəzərə alınmaması üçün son res qiymətini ikiyə bölmək lazımdır.
res /= 2;Cavabı çap edirik.
printf("%d\n", res);