thể trùng lặp:
Erasing from a std::vector while doing a for each?yếu tố Erase trong vector trong khi lặp lại cùng một vector
Tôi đang cố gắng để thực hiện vertice màu theo thuật toán này;
/*
Given G=(V,E):
Compute Degree(v) for all v in V.
Set uncolored = V sorted in decreasing order of Degree(v).
set currentColor = 0.
while there are uncolored nodes:
set A=first element of uncolored
remove A from uncolored
set Color(A) = currentColor
set coloredWithCurrent = {A}
for each v in uncolored:
if v is not adjacent to anything in coloredWithCurrent:
set Color(v)=currentColor.
add v to currentColor.
remove v from uncolored.
end if
end for
currentColor = currentColor + 1.
end while
*/
Tôi không hiểu "thêm v vào currentColor". dòng nhưng tôi nghĩ, nó có nghĩa là assing currentColor để v.Vì vậy, các "bộ" là gì? Dù sao vấn đề là xóa phần tử trong vector trong khi lặp lại nó. Đây là mã.
vector<struct Uncolored> uc;
vector<struct Colored> c;
int currentColor = 0;
struct Colored A;
struct Colored B;
vector<struct Uncolored>::iterator it;
vector<struct Uncolored>::iterator it2;
vector<struct Colored>::iterator it3;
for(it=uc.begin();it<uc.end();it++){
A.id = (*it).id;
uc.erase(uc.begin());
A.color = currentColor;
c.push_back(A);
for(it2=uc.begin();it2<uc.end();it2++) {
it3=c.begin();
while(it3 != c.end()) {
if(adjacencyMatris[(*it2).id][(*it3).id] == 0) {
B.id = (*it2).id;
it2 = uc.erase(it2);
B.color = currentColor;
c.push_back(B);
}
it3++;
}
}
currentColor = currentColor + 1;
}
Tôi nghĩ rằng dòng it2 = uc.erase(it2);
đã được sử dụng chung nhưng nó cho lỗi thời gian chạy.
Bạn có thể cho chúng tôi biết lỗi? – vidit