У меня есть функция в алгоритме раскраски графа, который присваивает цвет ряду курсов. Но он выбирает случайным образом, и я хотел бы улучшить алгоритм и назначить цвет более эффективно, чем выбирать его случайным образом на основе доступных цветов.Алгоритм раскраски графа - Назначить цвет
В этой функции N
- это количество расписаний.
void create_schedule(int **graph, list *courses, int numcourses){
int i, j, k, col=0;
for(i=0; i<numcourses; i++){
for(j=0; j<N; j++){
for(k=0; k<i; k++){
if(graph[i][k] > 0 && courses[k].color == j) break;
}
//color j was not yet chosen by adjacent nodes
if(k >= i){
courses[i].color = j;
break;
}
}
//if there is no color available, choose randomly
if(j >= N){
col = rand()%N;
courses[i].color = col;
}
}
}
Объяснение было бы здорово.
Ваш вопрос непонятен. Что вы подразумеваете под «назначать цвет более эффективно, чем давать его в случайном порядке на основе того, какой цвет доступен», что вы имеете в виду «эффективно» здесь? Вы хотите, чтобы он работал быстрее? Какую скорость вы ожидаете, и где вы ожидаете, что сможете достичь этого? – amit
Я хочу использовать меньше цветов как можно больше – CrazyGirl
И вы знаете, что эта проблема NP-Complete? Таким образом, оптимальное решение достигнет экспоненциального времени для достижения (если P = NP, что маловероятно)? – amit