נשלח בתאריך: 08 July 2007 בשעה 23:13 | | IP רשוּם
|
|
|
|
אני מנסה לעשות BFS על גרף (לא מכוון) אבל משום מה קודקוד המקור מסרב להיצבע... למישהו יש מושג מה הבעיה? זה די דחוף...
קוד:
int i,n; City **my_queue; City *head; Adjacent *adj; for(i=0; i<Size; i++) { head_city.colour=WHITE; head_city.distance=Size+1; head_city.parent=NULL; } source.colour=GRAY; source.distance=0; source.parent=NULL; my_queue=(City**)calloc(Size, sizeof(City*)); assert(my_queue!=NULL); my_queue[0]=&source; [0]->colour); i=0; n=1; while(i<n) { head=my_queue; i++;
adj=head->next; while(adj!=NULL) { if(adj->city->colour==WHITE) { adj->city->colour=GRAY; adj->city->distance=head->distance+1; adj->city->parent=head; my_queue[n]=adj->city; n++; } adj=adj->next; } head->colour=BLACK; } }
|
|
|
המבנים הם:
קוד:
typedef struct City_t { char* name; struct Adjacent_t *next; int colour; int distance; struct City_t * parent; }City;
typedef struct Adjacent_t { struct City_t *city; struct Adjacent_t *next; }Adjacent;
|
|
|
הגרף הוא מערך של סטרקטים מסוג city -המערך נקרא city_head כאשר לכל סיטי יש רשימה מקושרת של השכנים שלה- מסוג adjacent
הצבעים לבן אפור ושחור מוגדרים להיות 1,0,1-
רק בפעם הראשונה,כשhead הוא קודקוד המקור, הצבע משתנה לכאורה (הצבעים נכונים כשאני מדפיסה את head->colour אבל כשאני מדפיסה את head_city.colour ו iהמקור, הצבע לא תואם.)
אני כבר נואשת... למישהו יש רעיון?
|