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

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

?? 遺傳算法解tsp.cpp

?? 這是用c編寫的旅行商問題的算法
?? CPP
字號:
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <time.h>
using namespace std;


#define N 100				//種群規模
#define M 80				//子代雜交的對數
#define GEN 5000			//種群遺傳代數
#define MAX 32767
int *son[2*M],sontotal[2*M];
int city,*dis;


int* savedata(FILE *fp)
{
	char temp;
	short int i,j,t;
	int *a,n;
	while(1)
	{
		fread(&temp,sizeof(char),1,fp);
		if(temp=='\n')break;
		city=city*10+atoi(&temp);
	}
	n=city*(city+1)/2;
	a=(int*)malloc(n*sizeof(int));
	for(i=0;i<n;i++)
		a[i]=0;
	i=0;
	j=1;
	t=0;
	while(!feof(fp))
	{
		fread(&temp,sizeof(char),1,fp);
		if(temp==' ')
		{
			t++;
			if(t<j)i++;
			continue;
		}
		if(temp=='\n')
		{
			i++;
			j++;
			t=0;
			continue;
		}
		if(t>=j)continue;
		
		a[i]=a[i]*10+atoi(&temp);
	}
	return a;
}

/*	初始化種群 */
void RandInit(int*a[])
{
	short int i,j,k,u,v,tem;

	for(i=0;i<N;i++)
	{
		u=rand()%city;
		v=rand()%city;
		while(u==v)
			v=rand()%city;
		if(u>v)
		{
			tem=u;
			u=v;
			v=tem;
		}
		for(j=u,k=v;j<(u+v)/2.0+0.5;j++,k--)
		{
			tem=a[i][j];
			a[i][j]=a[i][k];
			a[i][k]=tem;
		}
	}
//	for (i=0;i<N;i++)
//		for(j=0;j<city;j++)
//			printf("%d ",a[i][j]);
//	printf("");
}

/* 計算每個個體的路程作為相應的適應值 */

void compdis(int* c[],int* t)
{
	int i,j,k,m,tem;
	for(i=0;i<N;i++)
	{
		t[i]=0;
		for(j=0;j<city;j++)
		{
			k=c[i][j];
			if (j==city-1) 
				m=c[i][0];
			else
				m=c[i][j+1];
			if(k>m)
				tem=k*(k+1)/2+m;
			else
				tem=m*(m+1)/2+k;
			t[i]+=dis[tem];
		}
			
	}
}

/* 計算每個個體的繁殖概率p[i] */

void comprate(int *t,float *p)
{
	int maxdis,i;

	for(i=0;i<N;i++)
		if(t[i]>maxdis)
			maxdis=t[i];
	for(i=0;i<N;i++)
		p[i]=t[i]*1.0/maxdis;

}

/* 
	兩個個體進行雜交
	隨機取A(B)中一段區域插入到B(A)前面,刪除其后重復的城市編號
 */

void cross(int *cir[],int i,int k,int m)
{
	short int u,v,tem,j,t,r;

	u=rand()%city;
	v=rand()%city;
	while(u==v)
		v=rand()%city;
	if(u>v)
	{
		tem=u;
		u=v;
		v=tem;
	}
	for(j=0;j<city;j++){
		son[i][j]=cir[m][j];
		son[i+M][j]=cir[k][j];
	}
// 	for(j=0;j<city;j++)
// 	printf("%d ",son[i+M][j]);
// 	printf("\n");
// 	for(j=0;j<city;j++)
// 	printf("%d ",son[i][j]);
// 	printf("\n");

	
	for(j=city-1;j>=0;j--)					
		for(t=u;t<=v;t++)
			if(son[i][j]==cir[k][t]){
				for(r=j;r>0;r--)
					son[i][r]=son[i][r-1];
				son[i][r]=-1;
				j++;
				break;
			}
	for(j=0;j<v-u+1;j++)
		son[i][j]=cir[k][u+j];

// 	for(j=0;j<city;j++)
// 	printf("%d ",son[i][j]);
//  	printf("\n");

	u=rand()%city;
	v=rand()%city;
	while(u==v)
		v=rand()%city;
	if(u>v)
	{
		tem=u;
		u=v;
		v=tem;
	}
	for(j=city-1;j>=0;j--)					
	for(t=u;t<=v;t++)
		if(son[i+M][j]==cir[m][t]){
			for(r=j;r>0;r--)
				son[i+M][r]=son[i+M][r-1];
			son[i+M][r]=-1;
			j++;
			break;
		}
	for(j=0;j<v-u+1;j++)
		son[i+M][j]=cir[m][u+j];

// 	for(j=0;j<city;j++)
// 	printf("%d ",son[i+M][j]);
//  	printf("\n");
}

/* 
	變異函數 
	隨機產生兩個點,直接進行交換,迭代50次
*/

void mutation(int i)
{
	int k=0;
	int u,v,tem;
	
	while(k<50)
	{
		u=rand()%city;
		v=rand()%city;
		while(u==v)
			v=rand()%city;
//		for(j=0;j<city;j++)
//			printf("%d",son[i][j]);
		tem=son[i][u];
		son[i][u]=son[i][v];
		son[i][v]=tem;
//				for(j=0;j<city;j++)
// 			printf("%d",son[i][j]);
		u=rand()%city;
		v=rand()%city;
		while(u==v)
			v=rand()%city;
		//		for(j=0;j<city;j++)
		//			printf("%d",son[i][j]);
		tem=son[i+M][u];
		son[i+M][u]=son[i+M][v];
		son[i+M][v]=tem;
		k++;
	}

}

/************************************************************************/
/* 更新種群                                                             */
/************************************************************************/

void selectgen(int *cir[],int *total)
{
	short int father[N],f=0,genarate[N],s=0;
	short int i,j,k,u,v,j1,j2;
	int minf,mins;
	for (i=0;i<N;i++) {
		minf=10*MAX;
		mins=10*MAX;
		for (j=0;j<N;j++)
			if(total[j]<minf)
			{	
				j1=j;
				minf=total[j];
			}
// 			printf("");
// 			printf("");
		for(j=0;j<2*M;j++)
			if(sontotal[j]<mins)
			{
				j2=j;
				mins=sontotal[j];
			}
// 			printf("");
// 			printf("");
		if(minf<=mins){
			father[f]=j1;
			total[j1]=total[j1]+MAX;
			f++;
		}			
		else{
			genarate[s]=j2;
			sontotal[j2]=sontotal[j2]+MAX;
			s++;
		}
	}
	sort(father,father+f);
	j=0;
	k=0;
	for (i=0;i<N;i++) {
		if(i==father[j]&&j<f){
			j++;
			continue;
		}
		else{
			u=genarate[k];
			k++;
			total[i]=sontotal[u];
			for(v=0;v<city;v++)
				cir[i][v]=son[u][v];
		}
	}
	for(i=0;i<N;i++)
		total[i]=total[i]-MAX;
// 	for(i=0;i<N;i++)
// 		printf("%d ",total[i]);
	
}

int main()
{
	int *cir[N],total[N],temp[N],m,min;
	float p[N],pc,pm;
	short int i,j,k,u,v,gen=0,tem;
	FILE* fp;
	clock_t start,finish;

	start=clock();

	fp = fopen("disCHN144.txt","r");
	dis=savedata(fp);

	for(i=0;i<N;i++)
		cir[i]=(int*)malloc(city*sizeof(int));		//最后要釋放
	for(i=0;i<2*M;i++)
		son[i]=(int*)malloc(city*sizeof(int));		//最后要釋放	

	srand((unsigned int)time(NULL));
	for(i=0;i<N;i++)
		for(j=0;j<city;j++)
			cir[i][j]=j;
	RandInit(cir);						//初始化種群

	while(gen<GEN)
	{
		compdis(cir,total);					//計算每個個體的適應值--路程,在這里適應值越小越適應
		comprate(total,p);					//計算每個個體的繁殖概率p[i]
	
		m=0;
		k=0;

		pc=rand()%10000/10000.0;
		for(i=0;i<N;i++)
			if(p[i]>pc)					//temp[k]存放繁殖概率大于pc的個體編號,這些個體是準備雜交的個體
			{
				temp[k]=i;
				k++;
			}
		while(m<M)
		{
			u=rand()%k;
			v=rand()%k;
			while(u==v)
				v=rand()%k;
			i=temp[u];						//k,m是準備雜交的兩個個體
			j=temp[v];
			cross(cir,m,i,j);
			pm=rand()%10000/10000.0;
			if(0.01>pm)						//變異概率為1%
				mutation(m);				
			m++;
		}
		for (i=0;i<2*M;i++)					//.................................
		{	sontotal[i]=0;
			for(j=0;j<city;j++)
			{
				k=son[i][j];
				if (j==city-1) 
					m=son[i][0];
				else
					m=son[i][j+1];
				if(k>m)
					tem=k*(k+1)/2+m;
				else
					tem=m*(m+1)/2+k;
				sontotal[i]+=dis[tem];
			}
/*			printf("%d ",sontotal[i]);*/
		}
// 		for (i=0;i<2*M;i++) 
// 			printf("%d ",sontotal[i]);
		selectgen(cir,total);						//在2M+N個體中選擇N個最優個體作為下一代種群
		gen++;
	}
	min=10*MAX;
	for (i=0;i<N;i++)	
		if(total[i]<min)
		{
			min=total[i];
			j=i;
		}
	printf("%d\n",min);
	for (i=0;i<city;i++)
		if(i==city-1)
			printf("%d\n",cir[j][i]);
		else
			printf("%d->",cir[j][i]);
	for(i=0;i<N;i++)
		free(cir[i]);		
	for(i=0;i<2*M;i++)
		free(son[i]);		
/*	free(dis);*/
	finish=clock();
	printf("%.3f(s)\n",(finish-start)/1000.0);
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
丁香婷婷综合色啪| 欧美一级xxx| 日韩精品一区在线观看| 中文在线资源观看网站视频免费不卡| 一区二区欧美国产| 国产乱码精品一区二区三 | 日本一区二区三区电影| 亚洲第一会所有码转帖| youjizz国产精品| 精品捆绑美女sm三区| 亚洲一二三区在线观看| 91在线无精精品入口| 久久综合九色综合欧美就去吻| 亚洲高清免费视频| 色综合天天综合网国产成人综合天 | 91在线高清观看| 2023国产精品自拍| 欧美aa在线视频| 欧美日韩精品久久久| 一区二区在线观看免费| av电影天堂一区二区在线| 精品免费日韩av| 久久草av在线| 欧美videos大乳护士334| 日韩成人伦理电影在线观看| 欧美网站一区二区| 亚洲一级二级三级在线免费观看| 99热这里都是精品| 国产精品久久久久久一区二区三区| 国产呦萝稀缺另类资源| 精品99一区二区三区| 久久超碰97人人做人人爱| 日韩午夜av电影| 91小视频在线| 亚洲激情第一区| 在线观看成人小视频| 亚洲精品免费看| 欧美自拍丝袜亚洲| 亚洲大片精品永久免费| 欧美精品高清视频| 天堂精品中文字幕在线| 欧美久久一区二区| 麻豆91在线播放免费| 日韩精品一区二区三区视频播放| 免费欧美日韩国产三级电影| 日韩一区二区三| 国产在线国偷精品免费看| 久久这里只有精品6| 国产成人综合亚洲网站| 国产精品国产三级国产普通话三级| 99久久国产综合精品色伊| 亚洲九九爱视频| 欧美日韩五月天| 久久99久久99小草精品免视看| 久久亚洲二区三区| 97se亚洲国产综合自在线观| 成人av在线影院| 亚洲综合免费观看高清在线观看| 欧美日韩一区二区三区免费看| 亚洲伊人色欲综合网| 欧美精品v国产精品v日韩精品| 久久99久久久久| 国产精品美女久久久久高潮| 欧美综合一区二区| 久草这里只有精品视频| 欧美激情资源网| 欧美日韩一区二区在线视频| 免费欧美在线视频| 国产精品的网站| 欧美一级一区二区| 成人av资源下载| 琪琪久久久久日韩精品| 中文字幕av一区二区三区高| 欧美日韩mp4| 成人av高清在线| 琪琪久久久久日韩精品| 亚洲同性同志一二三专区| 日韩一级大片在线观看| 91丨国产丨九色丨pron| 国产乱子伦一区二区三区国色天香| 综合色天天鬼久久鬼色| 精品久久久久99| 在线亚洲一区二区| 国产·精品毛片| 麻豆一区二区在线| 亚洲欧洲综合另类| 国产免费成人在线视频| 91麻豆精品国产| 色婷婷久久久亚洲一区二区三区| 麻豆精品精品国产自在97香蕉| 亚洲免费观看高清完整版在线| 久久视频一区二区| 欧美精品免费视频| 在线日韩一区二区| 成人动漫av在线| 国产成人亚洲综合a∨猫咪| 日产欧产美韩系列久久99| 一区二区三区久久久| 国产欧美精品一区| 久久久久久影视| 日韩一级精品视频在线观看| 欧美高清hd18日本| 在线看国产日韩| 在线观看网站黄不卡| 91在线视频在线| av激情成人网| 99国产精品国产精品久久| 国产99精品国产| 国产美女久久久久| 国产一二三精品| 国产精品一区二区在线观看不卡 | 成人性生交大片免费看在线播放| 久色婷婷小香蕉久久| 亚洲国产精品久久人人爱蜜臀 | 欧美日韩大陆在线| 色呦呦国产精品| 91九色最新地址| 日本久久电影网| 在线视频你懂得一区| 中文字幕一区二区在线观看| 日韩美女天天操| 久久综合九色综合97_久久久| 精品国产乱码久久久久久夜甘婷婷| 日韩美女主播在线视频一区二区三区 | 亚洲精品水蜜桃| 亚洲国产中文字幕在线视频综合| 亚洲国产成人av网| 日本欧美一区二区三区| 久久精工是国产品牌吗| 国产一区二区三区四| 国产精品 欧美精品| www.色综合.com| 在线观看不卡一区| 欧美精品欧美精品系列| 日韩美女主播在线视频一区二区三区| 日韩欧美123| 日本一区二区久久| 亚洲激情图片一区| 免费欧美在线视频| 成人午夜大片免费观看| 91久久人澡人人添人人爽欧美| 欧美日韩久久不卡| 精品国产制服丝袜高跟| 国产精品嫩草影院av蜜臀| 亚洲男人天堂av| 免费高清在线一区| 成人黄色片在线观看| 欧美人动与zoxxxx乱| 精品福利在线导航| 亚洲欧洲综合另类在线| 人人狠狠综合久久亚洲| 国产成人亚洲综合a∨猫咪| 日本电影欧美片| 久久综合狠狠综合久久综合88 | 一区二区三区中文字幕在线观看| 亚洲妇女屁股眼交7| 国产在线精品一区二区三区不卡 | 激情文学综合插| 91年精品国产| 精品国产第一区二区三区观看体验| 中文字幕欧美一| 免费成人在线视频观看| 一本久久综合亚洲鲁鲁五月天| 欧美一区二区高清| 国产精品福利一区二区三区| 蜜桃av一区二区| 欧美亚男人的天堂| 国产欧美日韩三区| 亚洲第一在线综合网站| k8久久久一区二区三区| 欧美成人vr18sexvr| 一区二区三区久久久| 丰满少妇在线播放bd日韩电影| 欧美一区二区日韩一区二区| 亚洲欧美精品午睡沙发| 国产成人一区在线| 欧美成va人片在线观看| 亚洲午夜激情网站| 色综合网站在线| 国产精品美女久久久久久久久久久| 视频一区免费在线观看| 在线观看av不卡| 亚洲三级久久久| 国产成人精品亚洲777人妖| 欧美一区二区三区喷汁尤物| 一区二区三区四区高清精品免费观看| 国产成人免费视频网站高清观看视频 | 久久综合资源网| 蜜臀99久久精品久久久久久软件| 欧美性感一区二区三区| 亚洲免费大片在线观看| 99久久久久久| 亚洲私人影院在线观看| 9人人澡人人爽人人精品| 日本一区二区三级电影在线观看| 国产精品资源站在线| 久久精品欧美一区二区三区麻豆 | 日韩免费看的电影| 免费看欧美美女黄的网站| 日韩网站在线看片你懂的|