Esempio n. 1
0
//检查选定的下一跳是否有可用信道:返回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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
void Ant::Move(){//需要完成的设置包括  选择出下一步要走的城市  增加去过的城市数目  在路径中加入这个城市  在禁忌表中这个城市禁止掉
    currentCityID=ChooseNextCity();
	movedPath[passedCityNUM]=currentCityID;
	passedCityNUM++;
	allowedCity[currentCityID]=0;
}