//检查选定的下一跳是否有可用信道:返回flag表示是否要杀死这只蚂蚁,如果杀则flag为1 int Ant::Check() { int flag,round;//flag返回受阻1或不受阻0,round计数回环次数 //int Channel_No;//来自信道的信息,如果信道无空闲需要重新选择下一跳则返回-1 int next;//暂定下一跳 for(round=0;round<3;round++) { next=ChooseNextCity(); if (next==-1) flag=1; else { Small_channel=Public_channel[m_nCurCityNo][next]; Channel_No=Small_channel.Check(A_T,L_T,Wide);//保存信道标号 if(Channel_No!=-1)//寻信道成功 { flag=0; Move(next,Channel_No);//写入下一跳和信道 break; } else { if(round==2 && Channel_No==-1) flag=1; } } } return flag; }
int *BuildNewPath(int k, int start, double **pheromones) { int *trail = new int[n]; bool *visited = new bool[n]; trail[0] = start; visited[start] = true; for (int i = 0; i < n-1; ++i) { int city = trail[i]; int next = ChooseNextCity(k, city, visited, pheromones); trail[i+1] = next; visited[next] = true; } return trail; }
void Ant::Move(){//需要完成的设置包括 选择出下一步要走的城市 增加去过的城市数目 在路径中加入这个城市 在禁忌表中这个城市禁止掉 currentCityID=ChooseNextCity(); movedPath[passedCityNUM]=currentCityID; passedCityNUM++; allowedCity[currentCityID]=0; }