[SIZE=2][COLOR=blue][FONT="]void[/FONT][/COLOR][/SIZE][FONT="][SIZE=2] Chk_cmn_nod(DLA d, [COLOR=blue]int[/COLOR] c, list<[COLOR=blue]int[/COLOR]>Path1)[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2]{[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] list <[COLOR=blue]int[/COLOR]> ::iterator it1;[COLOR=green]//vector[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] list <Action> ::iterator it2;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] cout<<[COLOR=#A31515]" Test"[/COLOR]<<c<<[COLOR=#A31515]"---"[/COLOR];[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] list<[COLOR=blue]int[/COLOR]> tmp, tmp1 ;list<[COLOR=blue]int[/COLOR]>::iterator last, itr1, itr2;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]int[/COLOR] flag=0;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]try[/COLOR]{[/SIZE][/FONT][SIZE=2]
[/SIZE][SIZE=2][COLOR=blue][FONT="]for[/FONT][/COLOR][/SIZE][FONT="][SIZE=2](it2=d.dla.at(c).actions.actionList.begin();it2!=d.dla.at(c).actions.actionList.end();it2++)[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] tmp.push_back(it2->getId());[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] SR.sort();[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] tmp.sort();[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] list<[COLOR=blue]int[/COLOR]> l3(tmp.size() + SR.size(), 0);[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2]last = set_intersection ( tmp.begin ( ) , tmp.end ( ) ,SR.begin ( ) , SR.end ( ) , l3.begin ( ) );[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]for[/COLOR](itr1=l3.begin();itr1!= last; itr1++)[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] {[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] SR.remove(*itr1); [COLOR=#00B050]// change public list[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] flag=1;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] }[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] }[COLOR=blue]catch[/COLOR](...)[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] {[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] cout<[COLOR=#A31515]"Error"[/COLOR];[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] }[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]if[/COLOR] (flag==1)[COLOR=#00B050]// if finds common nodes into boath list[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] {[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] tmp1=Path1;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] Path.merge(tmp1); [COLOR=#00B050]// change public list[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] }[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2]}[/SIZE][/FONT][SIZE=2]
[/SIZE][SIZE=2][COLOR=blue][FONT="]//-------------------------------------[/FONT][/COLOR][/SIZE][SIZE=2]
[/SIZE][SIZE=2][COLOR=blue][FONT="]//-------------------------------------[/FONT][/COLOR][/SIZE][SIZE=2]
[/SIZE][FONT="][SIZE=2]DWORD APIENTRY ThreadProc([COLOR=blue]void[/COLOR]* prm)[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2]{ [/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] d.DLAinitialList(n,a,b);[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]int[/COLOR] C,N,P=0;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] C=([COLOR=blue]int[/COLOR])prm;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] list<[COLOR=blue]int[/COLOR]>Path1,Tmp_Path;[COLOR=#00B050]// local list[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] list<[COLOR=blue]int[/COLOR]>::iterator t;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] Path1.push_back(C);[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]do[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] {[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] WaitForSingleObject(mut1, INFINITE);[COLOR=green]//Lock[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] Chk_cmn_nod(d, C,Path1);[COLOR=#00B050]// change public list[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] ReleaseMutex(mut1);[COLOR=green]//Unlock[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] WaitForSingleObject(mut4, INFINITE);[COLOR=green]//Lock[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] d.dla.at(C).actions.Remove(P);[COLOR=#00B050]// change public object[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] d.dla.at(C).actions.setNewProb();[COLOR=#00B050]//change public object[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] N=d.dla.at(C).selectRandomAct();[COLOR=#00B050]//change public object[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] ReleaseMutex(mut4);[COLOR=green]//Unlock[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]if[/COLOR](!SR.empty()) Path1.push_back(N);[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] P=C;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] C=N;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] }[COLOR=blue]while[/COLOR](!SR.empty());[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] Tmp_Path=Path;[COLOR=#00B050]// read public list[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] Tmp_Path.sort();[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] Tmp_Path.unique();[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]if[/COLOR](Tmp_Path.size() < Best_size)[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] {[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] t=Path1.begin();[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]for[/COLOR]([COLOR=blue]int[/COLOR] i=0;i<Path1.size();i++)[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] {[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]int[/COLOR] x= *t;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]int[/COLOR] y=*(++t);[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] WaitForSingleObject(mut2, INFINITE);[COLOR=#00B050]//lock[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] cout<[COLOR=#A31515]"r"[/COLOR];[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]if[/COLOR](Chkd.at(y)==0)[COLOR=#00B050]//check public vector[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] {[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] Chkd.at(y)=1;[COLOR=#00B050]//change[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] d.dla.at(x).RewardAndPenalty(y,0);[COLOR=#00B050] //change[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] }[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] ReleaseMutex(mut2);[COLOR=#00B050]//unlock[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] }[COLOR=green]//end of for[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] }[COLOR=green]// end of if[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]else[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] {[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]for[/COLOR]([COLOR=blue]int[/COLOR] i=0;i<Path1.size();i++)[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] {[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]int[/COLOR] x= *t;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]int[/COLOR] y=*(++t);[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] WaitForSingleObject(mut3, INFINITE);[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] cout<[COLOR=#A31515]"p"[/COLOR]; [/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]if[/COLOR](Chkd.at(y)==0)[COLOR=#00B050] //check public vector[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] {[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] Chkd.at(y)=1;[COLOR=#00B050] //change[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] d.dla.at(x).RewardAndPenalty(y,1);[COLOR=#00B050] //change[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] }[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] ReleaseMutex(mut3);[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] }[COLOR=green]//end of for[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] }[COLOR=green]// end of else[/COLOR][/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] WaitForSingleObject(mut5, INFINITE);[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]for[/COLOR](t=Path1.begin();t!=Path1.end();t++)[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] d.dla.at(*t).actions.Merge();[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] ReleaseMutex(mut5);[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2] [COLOR=blue]return[/COLOR] 0;[/SIZE][/FONT][SIZE=2]
[/SIZE][FONT="][SIZE=2]}[/SIZE][/FONT][SIZE=2]
[/SIZE]