九声相和歌

导航

C++用法的学习心得

        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);

代码太长,我只节选了部分,这个代码我还是有很多看不懂的地方,我把我能看懂的都标上了注释,并且有些注释查找了百度,我不知道是否正确,不正确的地方还希望老师指出。(๑•̀ㅂ•́)و✧

posted on 2015-09-10 12:47  九声相和歌  阅读(280)  评论(0编辑  收藏  举报