我想在C中實現圖着色算法,該實現基於如何通過迭代遍歷鄰接矩陣來分配顏色。將顏色分配給第二個頂點後,我無法得到它。C中的圖着色無法識別邏輯錯誤
這是我的程序的代碼:
int n, a[10][10], i, j, k, c[10], max = 0, col, ct = 0, rt = 0, m, count = 2;
void main() {
printf("enter n\n");
scanf("%d", &n);
printf("enter the Adjacency Matrix for %d rows and %d columns\n", n, n);
for (i = 0; i < n; i++) {
c[i] = 0;
for (j = 0; j < n; j++)
scanf("%d", &a[i][j]);
}
c[0] = 1;
c[1] = 2;
for (i = 1; i < n; i++) {
for (j = 0; j < n; j++)
if (a[i][j] > 0) {
m = 0;
for (col = 0; col < n; col++) {
if (a[i][col] > 0)
rt++;
if (a[col][i] > 0)
ct++;
}
m = rt;
if (ct > rt)
m = ct;
if (m < 2) {
if (a[0][i] > 0)
c[i] = 2;
else
c[i] = 1;
} else {
c[i] = count;
if (m > max) {
max = m;
count++;
}
}
rt = 0;
ct = 0;
}
if (c[i] < 1)
if (c[i - 1] > 1)
c[i] = 1;
else
c[i] = 2;
}
printf("The proper coloring is\n");
for (i = 0; i < n; i++)
printf("c%d=%d ", i + 1, c[i]);
printf("\n");
}
示例輸入: 考慮一個完整的圖:
0 1 1 1
1 0 1 1
1 1 0 1
1 1 1 0
預期輸出:
c1=1 c2=2 c3=3 c4=4
觀測輸出:
c1=1 c2=2 c3=3 c4=3
我重新格式化了您的代碼,您可以驗證邏輯是否正確? – chqrlie
不完全。我仍然得到一個不正確的輸出其他圖。 – Prithvi
我沒有改變邏輯,只是使它更具可讀性。您是否可以重新閱讀代碼並驗證您的算法是否已正確實施?每個人都難以遵循縮進代碼,包括任何人編寫代碼。 – chqrlie