C++这门课是从大一开始接触的,我觉得C++是一门很实用的课程,但他学起来并不容易。而好任何一门课程都需要实践,C++也是一样的,C++的实践就是写程序,我们写一个程序首先希望是程序能正确执行,然后是效率能够被接受,再然后就是易于维护。学好一样东西在于积累,只有在不断的积累中,我们才能渐渐体会到C++语言中的一些背后的东西。以前学习C++都是用背的_(:зゝ∠)_,所以编写代码现在对于我来说是比较困难的,我现在只会修改一些简单的代码,让他变成自己的东西。我现在要做的就是多多实践,争取早日编写出属于自己的代码,先从读懂代码开始,下面这个代码是我从网上搜到的别人编写的代码,解决最优问题的代码。
#include <stdlib.h>
#define MBIG 1000000000
#define MSEED 161803398
#define MZ 0
#define FAC (1.0/MBIG)
#include <stdio.h>
#include <math.h> 内部函数调用
#define TFACTR 0.9
#define ALEN(a,b,c,d) sqrt(((b)-(a))*((b)-(a))+((d)-©)*((d)-©)) 宏定义结点间的路径计算公式
void anneal(float x[ ], float y[ ], int iorder[ ], int ncity) 函数用于求解问题的最优解
{
int irbit1(unsigned long *iseed); 生成0或1的随机数函数
int metrop(float de, float t);
float ran3(long *idum);
float revcst(float x[ ], float y[ ], int iorder[ ], int ncity, int n[ ]);
void reverse(int iorder[ ], int ncity, int n[ ]);
float trncst(float x[ ], float y[ ], int iorder[ ], int ncity, int n[ ]);
void trnspt(int iorder[ ], int ncity, int n[ ]);
int ans, nover, nlimit, i1, i2;
int i, j, k, nsucc, nn, idec; i,j,k用于循环控制的变量
nsucc变量用于计数
nn变量用于判断随机选取的路径是否合法
idec变量用于保存函数irbit1函数返回的值(0或1)
long idum;
unsigned long iseed;
float path, de, t; path变量用于记录当前总路径值
de变量用于记录函数trncst,revcst的返回值(代价)
t变量用于初始温度值
nover=100*ncity;
nlimit=10*ncity;
path=0.0;
t=0.5;
for(i=1;i<ncity;i++){ 计算结点间初始顺序的路径长度
i1=iorder[i];
i2=iorder[i+1];
path+=ALEN(x[i1], x[i2], y[i1], y[i2]);
}
i1=iorder[ncity];
i2=iorder[1];
path+= ALEN(x[i1], x[i2], y[i1], y[i2]); 将路径头尾相连进行计算并结束循环
idum=-1;
iseed=111;
for(j=1;j<=100;j++){
nsucc=0;
for(k=1; k<=nover; k++){
do{
n[1]=1+(int) (ncity*ran3(&idum));
n[2]=1+(int) ((ncity-1)*ran3(&idum));
nn=1+((n[1]-n[2]+ncity-1)%ncity);
代码太长,我只节选了部分,这个代码我还是有很多看不懂的地方,我把我能看懂的都标上了注释,并且有些注释查找了百度,我不知道是否正确,不正确的地方还希望老师指出。(๑•̀ㅂ•́)و✧