עבור לתוכן

ערימה=תור עדיפויות ++C

Featured Replies

פורסם

זוהי פונקצית הוספת איבר לערימה:

האם היא פועלת נכון? <כי משהו לא מסתדר לי בתכנית הראשית>



template <class T>void Heap<T>::insert(T val)
{
data.Insert(val);
//move up
int parent=(data.Size()-1)/2,child=data.Size()-1;
while (parent>0 && data[parent]<data[child])
{
swap(parent,child);
child=parent;
parent/=2;
}
}

פורסם

על פניו נראה נכון.. אולי הבעיה ב swap או משהו.. מה בדיוק לא עובד ? כדי גם לעשות test case פשוטים לראות אם זה מתנהג נכון..

פורסם
  • מחבר

זוהי הפונקציה של swap


template <class T>void Heap<T>::swap(int i,int j)
{
T tmp=data[i];
data[i]=data[j];
data[j]=tmp;
}

בתכנית הראשית אני צריכה לעשות תור למרפאה.

כל חולה שמגיע מכניס שם, ת"ז , מקור הפניה, ומשך זמן הטיפול (=משך זמן השהות בחדר בין דקה לחמש דקות).

הגדרתי אוביקט מסוג חולה, ובו אופרטורים גדול וקטן (לפי מקור ההפניה החולה מקבל פרוטקציה בתור).

אבל כשאני מכניסה את החולים- הם ניכנסים לי בסדר לא ברור.

מה לתקן?

זוהי התכנית הראשית (הכנסת החולים לבדיקה):


for(int i=0; i<3; i++)//הכנסת חולים לחדר צילום פנוי
{
if(room[i].getTzilum()>0)//אם החדר תפוס בחולים
{
cout<<"\nIn room "<<i+1<<" kayam chole"<<" who called: "<<room[i].getName();
room[i].setTzilum(room[i].getTzilum()-1);
}
else
if(!h.isEmpty())
{
room[i]=h.GetTop();
cout<<"\nChole is called: "<<room[i].getName()<<", please enter to room number "<<i+1;
h.RemoveTop();
room[i].setTzilum(room[i].getTzilum()-1);
}
else
{
cout<<"\nNo chole in Tzilum-room "<<i+1;
}
}

פורסם

כפי שאמרתי תעשי דבר ראשון testcase פשוט לראות אם הבעיה היא ב heap או משהו אחר...

את יכולה לעשות תוכנית פשוטה שמשתמשת גם ב heap שמימשת וגם ב heap של STL ולהריץ על שתיהם סדרה זהה של פקודות (שיכולות להיות עם קלט רנדומלי למשל) ולראות אם הם מתנהגות באופן זהה...

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים