亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ant.cpp

?? 蟻群算法的Visual C++程序代碼。
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
if(SmellDispFlag)
{
if(Smell[k][i][j]<=2)
{
gotoxy(i,j);
putch(SPACE);
}
}
}
} /* of one location */
} /* of time to change the world */
} /* of world change */

void AntMove(void)
{
int antx,anty;
int smelltodrop,smellnow;

for(AntNow=0;AntNow<MAX_ANT;AntNow++)
{
ant[AntNow].SpeedTimer+=timer10ms;
if(ant[AntNow].SpeedTimer>=ant[AntNow].speed)
{
ant[AntNow].SpeedTimer = 0;
gotoxy(ant[AntNow].xxx,ant[AntNow].yyy);
putch(SPACE);
AntOneStep();
gotoxy(ant[AntNow].xxx,ant[AntNow].yyy);
/* ant0 is a sepecail ant, use different color */
if(AntNow==0) textcolor(0xd);
if(ant[AntNow].food) putch(ANT_CHAR_FOOD);
else putch(ANT_CHAR_EMPTY);
if(AntNow==0) textcolor(0x7);

/* remember trace */
ant[AntNow].tracex[ant[AntNow].TracePtr] = ant[AntNow].xxx;
ant[AntNow].tracey[ant[AntNow].TracePtr] = ant[AntNow].yyy;
if(++(ant[AntNow].TracePtr)>=TRACE_REMEMBER) ant[AntNow].TracePtr = 0;

/* drop smell */
antx = ant[AntNow].xxx;
anty = ant[AntNow].yyy;

if(ant[AntNow].food)
/* have food, looking for home */
{
if(ant[AntNow].SmellAmount[SMELL_TYPE_FOOD])
{
smellnow = Smell[SMELL_TYPE_FOOD][antx][anty];
smelltodrop = ant[AntNow].SmellAmount[SMELL_TYPE_FOOD]*SMELL_DROP_RATE;
if(smelltodrop>smellnow) Smell[SMELL_TYPE_FOOD][antx][anty] = smelltodrop;
/* else Smell[...] = smellnow */
ant[AntNow].SmellAmount[SMELL_TYPE_FOOD]-= smelltodrop;
if(ant[AntNow].SmellAmount[SMELL_TYPE_FOOD]<0) ant[AntNow].SmellAmount[SMELL_TYPE_FOOD] = 0;
} /* of have smell to drop */
} /* of have food */
else
/* no food, looking for food */
{
if(ant[AntNow].SmellAmount[SMELL_TYPE_HOME])
{
smellnow = Smell[SMELL_TYPE_HOME][antx][anty];
smelltodrop = ant[AntNow].SmellAmount[SMELL_TYPE_HOME]*SMELL_DROP_RATE;
if(smelltodrop>smellnow) Smell[SMELL_TYPE_HOME][antx][anty] = smelltodrop;
/* else Smell[...] = smellnow */
ant[AntNow].SmellAmount[SMELL_TYPE_HOME]-= smelltodrop;
if(ant[AntNow].SmellAmount[SMELL_TYPE_HOME]<0) ant[AntNow].SmellAmount[SMELL_TYPE_HOME] = 0;
} /* of have smell to drop */
}
} /* of time to go */
/* else not go */
} /* of for AntNow */

textcolor(FOOD_HOME_COLOR);
gotoxy(home.xxx,home.yyy); putch(HOME_CHAR);
gotoxy(food.xxx,food.yyy);
if(food.amount>0) putch(FOOD_CHAR);
else putch(FOOD_CHAR2);
textcolor(7);

gotoxy(1,MAXY+1);
printf("Food %d, Home %d ",food.amount,home.amount);
}

void AntOneStep(void)
{
int ddir,tttx,ttty;
int i;

ddir = ant[AntNow].dir;
tttx = ant[AntNow].xxx;
ttty = ant[AntNow].yyy;

ddir = AntNextDir(tttx,ttty,ddir);

switch(ddir)
{
case UP: ttty--;
break; 
case DOWN: ttty++;
break; 
case LEFT: tttx--;
break; 
case RIGHT: tttx++;
break; 
default: break;
} /* of switch dir */

ant[AntNow].dir = ddir;
ant[AntNow].xxx = tttx;
ant[AntNow].yyy = ttty;

if(ant[AntNow].food)
/* this ant carry with food, search for home */
{
if(tttx==home.xxx&&ttty==home.yyy)
{
home.amount++;
AntInitial();
}
if(tttx==food.xxx&&ttty==food.yyy)
ant[AntNow].SmellAmount[SMELL_TYPE_FOOD] = MAX_SMELL;
} /* of search for home */
else
/* this ant is empty, search for food */
{
if(tttx==food.xxx&&ttty==food.yyy)
{
if(food.amount>0)
{
ant[AntNow].food = 1;
food.amount--;
ant[AntNow].SmellAmount[SMELL_TYPE_FOOD] = MAX_SMELL;
ant[AntNow].SmellAmount[SMELL_TYPE_HOME] = 0;
ant[AntNow].dir = TurnBack(ant[AntNow].dir);
for(i=0;i<TRACE_REMEMBER;i++)
{
ant[AntNow].tracex[i] = 0;
ant[AntNow].tracey[i] = 0;
}
ant[AntNow].TracePtr = 0;
CanFindFood = 1;
} /* of still have food */
}
if(tttx==home.xxx&&ttty==home.yyy)
ant[AntNow].SmellAmount[SMELL_TYPE_HOME] = MAX_SMELL;
} /* of search for food */
}

void DealKey(char key)
{
int i;
switch(key)
{
case 'p': gettime(&endtime);
DispPlayTime();
getch();
gotoxy(1,MAXY+1);
for(i=1;i<=MAXX-1;i++) putch(SPACE);
break;
case 't': if(SmellDispFlag)
{
SmellDispFlag=0;
ClearSmellDisp();
}
else SmellDispFlag = 1;
break;
case '1': DispSmell(SMELL_TYPE_FOOD);
getch();
ClearSmellDisp();
break;
case '2': DispSmell(SMELL_TYPE_HOME);
getch();
ClearSmellDisp();
break;
case '3': DispSmell(2);
getch();
ClearSmellDisp();
break;
case 's': SaveBlock();
break;
case 'l': LoadBlock();
break;
default: gotoxy(1,MAXY+1);
for(i=1;i<=MAXX-1;i++) putch(SPACE);
} /* of switch */
}

void ClearSmellDisp(void)
{
int k,i,j;

for(k=0;k<=1;k++)
/* SMELL TYPE FOOD and HOME */
for(i=1;i<=MAXX;i++)
for(j=1;j<=MAXY;j++)
{
if(Smell[k][i][j])
{
gotoxy(i,j);
putch(SPACE);
}
} /* of one location */
}

void DispSmell(int type)
/* input: 0 -- Only display food smell
1 -- Only display home smell
2 -- Display both food and home smell
*/
{
int k,i,j;
int fromk,tok;
int smelldisp;

switch(type)
{
case 0: fromk = 0;
tok = 0;
break;
case 1: fromk = 1;
tok = 1;
break;
case 2: fromk = 0;
tok = 1;
break;
default:fromk = 0;
tok = 1;
break; 
}
SmellGoneTimer = 0;
for(k=fromk;k<=tok;k++)
/* SMELL TYPE FOOD and HOME */
for(i=1;i<=MAXX;i++)
for(j=1;j<=MAXY;j++)
{
if(Smell[k][i][j])
{
smelldisp = 1+((10*Smell[k][i][j])/(MAX_SMELL*SMELL_DROP_RATE));
if(smelldisp>=30000||smelldisp<0) smelldisp = 30000;
gotoxy(i,j);
if(i!=food.xxx||j!=food.yyy)
{
if((i==food.xxx&&j==food.yyy)||(i==home.xxx&&j==home.yyy))
/* don't over write Food and Home */;
else
{
if(smelldisp>9) putch('#');
else putch(smelldisp+'0');
}
}
}
} /* of one location */ 
}

int AntNextDir(int xxx,int yyy,int ddir)
{
int randnum;
int testdir;
int CanGoState;
int cangof,cangol,cangor;
int msf,msl,msr,maxms;
int type;

CanGoState = CanGo(xxx,yyy,ddir);
if(CanGoState==0||CanGoState==2||CanGoState==3||CanGoState==6) cangof = 1;
else cangof = 0;
if(CanGoState==0||CanGoState==1||CanGoState==3||CanGoState==5) cangol = 1;
else cangol = 0;
if(CanGoState==0||CanGoState==1||CanGoState==2||CanGoState==4) cangor = 1;
else cangor = 0;

if(ant[AntNow].food) type = SMELL_TYPE_HOME;
else type = SMELL_TYPE_FOOD;

msf = GetMaxSmell(type,xxx,yyy,ddir);
msl = GetMaxSmell(type,xxx,yyy,TurnLeft(ddir));
msr= GetMaxSmell(type,xxx,yyy,TurnRight(ddir));
maxms = MaxLocation(msf,msl,msr);
/* maxms - 1 - msf is MAX
2 - msl is MAX
3 - msr is MAX 
0 - all 3 number is 0 */

testdir = NULL;
switch(maxms)
{
case 0: /* all is 0, keep testdir = NULL, random select dir */
break;
case 1: if(cangof)
testdir = ddir;
else
if(msl>msr) if(cangol) testdir = TurnLeft(ddir);
else if(cangor) testdir = TurnRight(ddir);
break;
case 2: if(cangol)
testdir = TurnLeft(ddir);
else
if(msf>msr) if(cangof) testdir = ddir;
else if(cangor) testdir = TurnRight(ddir);
break;
case 3: if(cangor)
testdir = TurnRight(ddir);
else
if(msf>msl) if(cangof) testdir =ddir;
else if(cangol) testdir = TurnLeft(ddir);
break;
default:break;
} /* of maxms */

randnum = random(1000);
if(randnum<SMELL_DROP_RATE*1000||testdir==NULL)
/* 1. if testdir = NULL, means can not find the max smell or the dir to max smell can not go
then random select dir
2. if ant error, don't follow the smell, random select dir
*/
{
randnum = random(100);
switch(CanGoState)
{
case 0: if(randnum<90) testdir = ddir;
else if (randnum>=90&&randnum<95) testdir = TurnLeft(ddir);
else testdir = TurnRight(ddir);
break;
case 1: if(randnum<50) testdir = TurnLeft(ddir);
else testdir = TurnRight(ddir);
break;
case 2: if(randnum<90) testdir = ddir;
else testdir = TurnRight(ddir);
break;
case 3: if(randnum<90) testdir = ddir;
else testdir = TurnLeft(ddir);
break;
case 4: testdir = TurnRight(ddir);
break;
case 5: testdir = TurnLeft(ddir);
break;
case 6: testdir = ddir;
break;
case 7: testdir = TurnBack(ddir);
break;
default:testdir = TurnBack(ddir);
} /* of can go state */ 
}
return(testdir);
}

int GetMaxSmell(int type,int xxx,int yyy,int ddir)
{
int i,j;
int ms; /* MAX smell */

ms = 0;
switch(ddir)
{
case UP: for(i=xxx-ANT_EYESHOT;i<=xxx+ANT_EYESHOT;i++)
for(j=yyy-ANT_EYESHOT;j<yyy;j++)
{
if(!JudgeCanGo(i,j)) continue;
if((i==food.xxx&&j==food.yyy&&type==SMELL_TYPE_FOOD)||
(i==home.xxx&&j==home.yyy&&type==SMELL_TYPE_HOME))
{
ms = MAX_SMELL;
break;
}
if(IsTrace(i,j)) continue;
if(Smell[type][i][j]>ms) ms = Smell[type][i][j];
}
break; 
case DOWN: for(i=xxx-ANT_EYESHOT;i<=xxx+ANT_EYESHOT;i++)
for(j=yyy+1;j<=yyy+ANT_EYESHOT;j++)
{
if(!JudgeCanGo(i,j)) continue;
if((i==food.xxx&&j==food.yyy&&type==SMELL_TYPE_FOOD)||
(i==home.xxx&&j==home.yyy&&type==SMELL_TYPE_HOME))
{
ms = MAX_SMELL;
break;
}
if(IsTrace(i,j)) continue;
if(Smell[type][i][j]>ms) ms = Smell[type][i][j];
}
break; 
case LEFT: for(i=xxx-ANT_EYESHOT;i<xxx;i++)
for(j=yyy-ANT_EYESHOT;j<=yyy+ANT_EYESHOT;j++)
{
if(!JudgeCanGo(i,j)) continue;
if((i==food.xxx&&j==food.yyy&&type==SMELL_TYPE_FOOD)||
(i==home.xxx&&j==home.yyy&&type==SMELL_TYPE_HOME))
{
ms = MAX_SMELL;
break;
}
if(IsTrace(i,j)) continue;
if(Smell[type][i][j]>ms) ms = Smell[type][i][j];
}
break; 
case RIGHT: for(i=xxx+1;i<=xxx+ANT_EYESHOT;i++)
for(j=yyy-ANT_EYESHOT;j<=yyy+ANT_EYESHOT;j++)
{
if(!JudgeCanGo(i,j)) continue;
if((i==food.xxx&&j==food.yyy&&type==SMELL_TYPE_FOOD)||
(i==home.xxx&&j==home.yyy&&type==SMELL_TYPE_HOME))
{
ms = MAX_SMELL;
break;
}
if(IsTrace(i,j)) continue;
if(Smell[type][i][j]>ms) ms = Smell[type][i][j];
}
break; 
default: break;
}
return(ms);
}

int IsTrace(int xxx,int yyy)
{
int i;

for(i=0;i<TRACE_REMEMBER;i++)
if(ant[AntNow].tracex[i]==xxx&&ant[AntNow].tracey[i]==yyy) return(1);
return(0); 
}

int MaxLocation(int num1,int num2,int num3)
{
int maxnum;

if(num1==0&&num2==0&&num3==0) return(0);

maxnum = num1;
if(num2>maxnum) maxnum = num2;
if(num3>maxnum) maxnum = num3;

if(maxnum==num1) return(1);
if(maxnum==num2) return(2);
if(maxnum==num3) return(3); 
}

int CanGo(int xxx,int yyy,int ddir)
/* input: xxx,yyy - location of ant
ddir - now dir
output: 0 - forward and left and right can go
1 - forward can not go
2 - left can not go
3 - right can not go
4 - forward and left can not go
5 - forward and right can not go
6 - left and right can not go
7 - forward and left and right all can not go
*/
{
int tx,ty,tdir;
int okf,okl,okr;

/* forward can go ? */
tdir = ddir;
tx = xxx;
ty = yyy;
switch(tdir)
{
case UP: ty--;
break; 
case DOWN: ty++;
break; 
case LEFT: tx--;
break; 
case RIGHT: tx++;
break; 
default: break;
} /* of switch dir */
if(JudgeCanGo(tx,ty)) okf = 1;
else okf = 0;

/* turn left can go ? */
tdir = TurnLeft(ddir);
tx = xxx;
ty = yyy;
switch(tdir)
{
case UP: ty--;
break; 
case DOWN: ty++;
break; 
case LEFT: tx--;
break; 
case RIGHT: tx++;
break; 
default: break;
} /* of switch dir */
if(JudgeCanGo(tx,ty)) okl = 1;
else okl = 0;

/* turn right can go ? */
tdir = TurnRight(ddir);
tx = xxx;
ty = yyy;
switch(tdir)
{
case UP: ty--;
break; 
case DOWN: ty++;
break; 
case LEFT: tx--;
break; 
case RIGHT: tx++;
break; 
default: break;
} /* of switch dir */
if(JudgeCanGo(tx,ty)) okr = 1;
else okr = 0;

if(okf&&okl&&okr) return(0);
if(!okf&&okl&&okr) return(1);
if(okf&&!okl&&okr) return(2);
if(okf&&okl&&!okr) return(3);
if(!okf&&!okl&&okr) return(4);
if(!okf&&okl&&!okr) return(5);
if(okf&&!okl&&!okr) return(6);
if(!okf&&!okl&&!okr) return(7);
return(7);
}

int JudgeCanGo(int xxx,int yyy)
/* input: location to judeg
output: 0 -- can not go
1 -- can go
*/
{
int i,j;

if(xxx<=0||xxx>MAXX) return(0);
if(yyy<=0||yyy>MAXY) return(0);
if(block[xxx][yyy]) return(0);
return(1);
}

int TurnLeft(int ddir)
{
switch(ddir)
{
case UP: return(LEFT);
case DOWN: return(RIGHT);
case LEFT: return(DOWN);
case RIGHT: return(UP);
default: break;
} /* of switch dir */
}

int TurnRight(int ddir)
{
switch(ddir)
{
case UP: return(RIGHT);
case DOWN: return(LEFT);
case LEFT: return(UP);
case RIGHT: return(DOWN);
default: break;
} /* of switch dir */
}

int TurnBack(int ddir)
{
switch(ddir)
{
case UP: return(DOWN);
case DOWN: return(UP);
case LEFT: return(RIGHT);
case RIGHT: return(LEFT);
default: break;
} /* of switch dir */
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
秋霞午夜鲁丝一区二区老狼| 国产女人18毛片水真多成人如厕 | 久久国产精品露脸对白| 欧美日韩在线直播| 婷婷一区二区三区| 7777女厕盗摄久久久| 日韩福利视频网| 日韩精品中文字幕一区 | 中文字幕一区二区日韩精品绯色| 粉嫩av一区二区三区粉嫩| 国产亚洲欧美一级| 99久久99久久精品免费看蜜桃| 亚洲精品日产精品乱码不卡| 欧美日韩三级在线| 久久成人精品无人区| 国产欧美日韩麻豆91| 91久久免费观看| 99热这里都是精品| 亚洲一二三四区不卡| 欧美一区二区三区免费大片| 国产成人午夜99999| 亚洲欧美国产三级| 日韩亚洲电影在线| 不卡一区二区中文字幕| 性做久久久久久免费观看欧美| 欧美videos大乳护士334| 成人免费观看男女羞羞视频| 亚洲国产精品久久一线不卡| 久久综合视频网| 在线国产电影不卡| 国产精品自拍毛片| 婷婷国产在线综合| 欧美激情一区二区三区| 欧美日韩成人激情| 成人激情免费视频| 奇米色一区二区| 亚洲国产精品v| 日韩一二三区不卡| 91传媒视频在线播放| 国产一区二区三区免费播放| 一区二区三区色| 久久这里只有精品视频网| 91九色最新地址| 国产精品一二一区| 日韩高清电影一区| 亚洲狠狠丁香婷婷综合久久久| 精品国产91久久久久久久妲己| 欧美色电影在线| 从欧美一区二区三区| 久久成人精品无人区| 午夜欧美视频在线观看| 国产精品久久毛片a| 亚洲精品在线免费观看视频| 欧美日韩视频第一区| 91老师片黄在线观看| 国产黄色精品网站| 久久国产免费看| 性久久久久久久久| 亚洲美腿欧美偷拍| 国产精品污网站| 亚洲精品一区二区在线观看| 欧美一级一区二区| 欧美日韩视频一区二区| 91免费在线看| 99久久精品免费看国产| 成人国产在线观看| 成人性生交大片免费看中文网站| 国产一区二区三区在线观看免费视频 | 美女视频免费一区| 视频一区在线播放| 三级精品在线观看| 日韩精品电影在线观看| 日韩和欧美一区二区三区| 午夜视黄欧洲亚洲| 亚洲成a人v欧美综合天堂| 国产精品一卡二卡在线观看| 麻豆精品一区二区综合av| 免费成人小视频| 免费精品视频在线| 久久99久久精品| 黄色资源网久久资源365| 麻豆91在线看| 久久精品国产免费看久久精品| 捆绑紧缚一区二区三区视频| 日本不卡123| 另类专区欧美蜜桃臀第一页| 国产综合久久久久影院| 国产成人综合亚洲91猫咪| 国产成人免费在线观看| av色综合久久天堂av综合| 91麻豆精品在线观看| 日本二三区不卡| 欧美日韩视频不卡| 欧美mv日韩mv国产网站app| 精品国产91洋老外米糕| 久久久久久久久久久久久久久99| 国产亚洲自拍一区| 亚洲美女电影在线| 午夜精品视频一区| 激情深爱一区二区| 99久久99久久精品免费观看 | 欧美色图在线观看| 欧美日韩视频专区在线播放| 日韩限制级电影在线观看| 国产视频在线观看一区二区三区| 国产精品天天看| 一区二区三区四区五区视频在线观看| 一区二区三区蜜桃| 久久国产精品露脸对白| av一区二区三区黑人| 欧美亚洲国产一区二区三区va | 亚洲午夜在线视频| 久色婷婷小香蕉久久| 成人精品免费看| 欧美日韩一区小说| 国产欧美日韩一区二区三区在线观看| 亚洲精品ww久久久久久p站| 蜜桃精品视频在线| 97久久精品人人爽人人爽蜜臀| 精品污污网站免费看| 国产蜜臀97一区二区三区| 三级欧美在线一区| 成人动漫中文字幕| 欧美成人在线直播| 亚洲黄一区二区三区| 久久91精品久久久久久秒播| 91美女在线观看| 精品久久久久久综合日本欧美| 亚洲精品高清在线| 国产乱一区二区| 制服.丝袜.亚洲.另类.中文| 亚洲欧洲国产日本综合| 麻豆专区一区二区三区四区五区| www.一区二区| 精品国产精品一区二区夜夜嗨| 亚洲精品免费电影| 国产suv精品一区二区6| 欧美一区二区三区在线视频| 亚洲欧美日韩电影| 国产一区二区电影| 日韩欧美成人一区二区| 亚洲尤物在线视频观看| 99国产精品99久久久久久| 26uuu亚洲综合色| 日日嗨av一区二区三区四区| 91成人国产精品| 日本不卡一二三区黄网| 欧美四级电影网| 亚洲人吸女人奶水| 国产aⅴ精品一区二区三区色成熟| 69堂亚洲精品首页| 一区二区免费看| 97精品国产露脸对白| 国产清纯美女被跳蛋高潮一区二区久久w| 香蕉成人伊视频在线观看| 在线一区二区视频| 亚洲欧美日韩精品久久久久| www.成人网.com| 国产精品久久久久婷婷二区次| 国产乱子轮精品视频| 精品福利一二区| 免费av网站大全久久| 欧美一级日韩一级| 男女男精品视频| 日韩一区二区三区电影在线观看| 婷婷国产在线综合| 日韩一区二区在线观看视频 | 亚洲午夜激情av| 欧美专区日韩专区| 洋洋av久久久久久久一区| 色综合中文字幕国产| 中文字幕av在线一区二区三区| 懂色av中文字幕一区二区三区| 国产人成一区二区三区影院| 国产91对白在线观看九色| 欧美国产欧美综合| 成人午夜私人影院| 国产精品进线69影院| 色综合天天狠狠| 亚洲国产精品影院| 欧美一区二区免费观在线| 久久国产精品一区二区| 国产欧美一区在线| 99re热视频精品| 亚洲午夜在线电影| 欧美一区二区福利视频| 国产一区二区电影| 亚洲少妇中出一区| 欧美日韩在线观看一区二区 | 成人福利视频网站| 亚洲自拍偷拍图区| 在线成人av网站| 韩国一区二区视频| 一区在线中文字幕| 欧美日韩在线播放一区| 国产综合久久久久影院| 日韩一区欧美一区| 欧美日韩成人一区二区| 国产高清精品在线| 亚洲一区二区三区四区不卡|