开到荼蘼 发表于 2015-2-3 15:42:50

C源代码改成C# 大神请戳进来 急等

选修课作业,将C语言源代码改为C#,要求不高,代码在350行左右,请各位大神帮改~这两天就要交,在线等:'(:'(
代码附上一部分。关于遗传算法,大神请先看看~

#include<math.h>
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#define FILE_PATH"G:\\cnc144.txt","r"//数据文件名
#define N_COLONY 300// N_COLONY>=xColony
#define CITY   144// CITY>=xCity
//--------------------------------------------//
int   xColony=300;   //##//个体数
int   xCity=198;
doubleedgeSpeed=30;   //##//临界速度
doubleprobab1=0.02;    //##//变异概率
doubleprobab2=0.05;    //##//映射概率 //0.04(80) 0.03(50) 0.015(80)0.05(50);
long    NOCHANGE=200000;//##//最大停止改变代数
long    maxGen=300000;    //##//停机代数
int   colony;
doublecityXY;
doublecity_dis;
doubledis_p;
doublesumbest,sumTemp;
doublespeed;
int   temp,ibest;
clock_t timeStart,timeNow,timeTemp;
long    GenNum,Ni;

void    init();
int   position(int *tmp,int C);
void    invert(int pos_start,int pos_end);
void    printBest(long GenNum,long Ni);
void    tempTest(int i);
void    mapped();
void    LastCP();
doublepath(int tmp[],int k1,int k2);
FILE *fpme;/*by me*/
//###################################################################//
void main()
{
register int C1,j,k,pos_C,pos_C1; int k1,k2,l1,l2,pos_flag,icount;
register double disChange;
static int i=0;
timeStart=timeNow=timeTemp=clock();init();
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^//
for(;;)
{ for(j=0;j<xCity;j++)temp=colony;
    disChange=0;pos_flag=0;
    pos_C=rand()%xCity;
    for(;;)
    {
      if((rand()/32768.0)<probab1)   //内变异算子
      { do pos_C1=rand()%xCity;while (pos_C1==pos_C);
      C1=colony;
      }
      else
   { do j=rand()%xColony;while(j==i);
      k=position(colony,temp);
      C1=colony[(k+1)%xCity];
      pos_C1=position(temp,C1);
      }
   if( speed>edgeSpeed && pos_C1<pos_C+2)break;         ///////////////////////   
   if((pos_C+1)%xCity==pos_C1 || (pos_C-1+xCity)%xCity==pos_C1 )break;
   k1=temp; k2=temp[(pos_C+1)%xCity]; l1=temp; l2=temp[(pos_C1+1)%xCity];
   disChange+=city_dis+city_dis-city_dis-city_dis;
   invert(pos_C,pos_C1); pos_flag++;if(pos_flag>xCity-1)break;////////////
      pos_C++; if(pos_C>=xCity)pos_C=0;               /**********************/
      if( speed<edgeSpeed && disChange<0) { dis_p+=disChange; disChange=0; tempTest(i);}   //每有改变就计算
}
if(speed>=edgeSpeed && disChange<0 ) {dis_p+=disChange;disChange=0; tempTest(i);}/////speed>=1500 &&
    i++;
    if(i>=xColony)
{Ni++; GenNum++;i=0;
   probab1=0.02*(1-GenNum*0.01/maxGen);      //内逆转概率逐渐减小
if( speed<edgeSpeed && (rand()/32767.0<probab2) )   //
{   mapped();   
      probab2=0.05*(GenNum*2.0/maxGen+1);    //部分交换概率逐渐增大
}
      if(NOCHANGE-Ni<1) LastCP();   //5可改
if(GenNum>=maxGen || Ni>=NOCHANGE ) { printf("\n-------------------");printBest(GenNum,Ni); exit(1); }
}
}

}

开到荼蘼 发表于 2015-2-3 15:52:18

:'(:'(:'(

开到荼蘼 发表于 2015-2-3 15:52:37

:'(:'(:'(

ibcadmin 发表于 2015-2-3 19:00:18

只能看懂小部分C

songyusb 发表于 2015-2-3 19:01:06

帮顶

沐府小悠然 发表于 2015-3-9 09:39:30

FILE *fpme;/*by me*/
这个是指针。
register int C1,j,k,pos_C,pos_C1; int k1,k2,l1,l2,pos_flag,icount;
register double disChange;
这些是寄存器。
我要是没记错,C#没指针,页没寄存器。据目测,这代码没办法改。
页: [1]
查看完整版本: C源代码改成C# 大神请戳进来 急等