10.7. Problem właściwego doboru_ 265
Algorytm doboru można zamknąć w rozbudowanej funkcji inciiri:
void main ()
I
int student, wybierający, promotor, odrzucony; for(student=0;stuaent<5; student++)
{
wybierajacy=studcnt; while(wybierający!=-l)
(
następny[wybiera jacy|++;
promotor=wybiera[wybiera jacy| [następny[wybierajacy I1; if(dobor[proraoLor]==-li //promotor (i jego temat) jest wolny (
dobor[promotor]“wybierający; wybierajacy=-l;
)
else
<
ifi lubi[promotor] [wybiera jacy]<lubi[promotor] [dobor[promoto I
odrzueony-dobor[promotor]; dobor[promotor1“Wybierajacy; wybierajacy-odrzucony;
i
I
) for(int i=0;i<5;i++)
cout « "(Promotor " « i << ", student ”
« (char) (dohnr[i] + 1 A1) << ")\n";
]
Spróbujmy przeanalizować pracę programu, ukazując poszczególne wybory dokonywane przez studentów i informując o łamanych związkach:
• Wybierającym staje się A i próbuje on temat (promotora) 0:
• Temat (promotor) 0 byl wolny i zostaje on przyznany studentowi A;
• Wybierającym staje się B i próbuje on temat (promotora) 1;
• Temat (promotor) I był wolny i zostaje on przyznany studentowi B;
• Wybierającym staje się C i próbuje on temat (promotora) 0:
• Promotor 0 porzuca swój aktualny wybór A na rzecz C;
• Wybierającym staje się porzucony A i próbuje on temat (promotora) 4;
• Temat (promotor) 4 byl wolny i zostaje on przyznany studentowi A;
• Wybierającym staje się D i próbuje on temat (promotora) 3;
• Temat (promotor) 3 był wolny i zostaje on przyznany studentowi D;
• Wybierającym staje się E i próbuje on temat (promotora) 4;