02-06-2007, 20:12
|
|
|
חבר מתאריך: 18.01.05
הודעות: 180
|
|
שאלה בDFS
ראיתי את האלגוריתם של DFS. הבנתי שלכל קודקוד בגרף נשמרים : 1. ההורה 2. ה"time" שבו הגיעו אליו 3. הצבע שלו.
האלגוריתם נראה כך :
איתחול:
for all nodes u do
{ colour[u]=white;
p[u]=NULL;
}
time = 0;
for all nodes u do
if colour[u] == white then DFS(u);
וכעת האלגוריתם עצמו:
DFS(u):
visit(u);
time = time + 1;
d[u] = time;
colour[u] = grey;
for all nodes v adjacent to u do
{ if colour[v] == white then
{ p[v] = u;
DFS(u);
}
}
time = time + 1;
f[u] = time;
colour[u] = black;
רציתי לדעת במה כל אחד מהמשתנים שנשמרים לי לכל קודקוד עוזר לי למציאת תכונות של הגרף. לדוג' - איך "לשדרג" את האלגוריתם ע"מ שימצא אם יש לי מעגלים בגרף.
וכעת השאלה העיקרית:
נניח שנתון לי גרף לא מכוון שלכל קודקוד מקס' 3 שכנים. איך ניתן, בסיבוכיות הנמוכה ביותר, לדעת האם יש מעגל שגודלו לא מתחלק ב3, ואם כן להדפיס אותו.
תודה רבה למדריכים ולעוזרים.
|