Chinaunix

标题: C语言实现TSP 动态规划 [打印本页]

作者: zhlzn    时间: 2008-12-09 00:47
标题: C语言实现TSP 动态规划
/*
  *  平台: Debian 5.0
*  编译器:gcc version 4.3.2 (Debian 4.3.2-1)
*  任何问题联系:goon83@126.com
*/
#include
#define MAXN        6
#define MAXSTATE 120        //在迭代过程中的最多的状态数量(5 * 4 * 3 * 2 * 1)
#define TRUE         1
#define FALSE        0
#define DELETE      1000     //设置一个足够大的数来表示删除当前结点
struct StateStruct{
    int CurNode;                   //当前的结点
    int LeftNode[MAXN -1];   //最多有 (MAXN -1)个未访问的结点
    int LeftNodeCount;          //记录LeftNode数组的长度
    int Dis;                           //从该结点回到目标节点的距离
};
typedef struct StateStruct State;
//最多有MAXSTATE个状态。
State   StateArrayCur[MAXSTATE];
State   StateArrayOld[MAXSTATE];
int Dis[MAXN][MAXN] ={
    0, 10, 20, 30, 40, 50,
        12, 0 ,18, 30, 25, 21,
        23, 19, 0, 5,  10, 15,
        34, 32, 4, 0,  8,  16,
        45, 27, 11,10, 0,  18,
        56, 22, 16,20, 12,  0
};
/*
*比较两个状态TempState, TargetState是否一致
*返回: TRUE  两个状态一致,可以合并
*           FALSE 两个状态不一致, 不可以合并
*/
int CompareState(State TempState, State TargetState){
    int i;
   
    if (TempState.CurNode != TargetState.CurNode){
        return FALSE;
    }
   
    for (i = 0; i  StateArrayCur.Dis){
                        MinState = StateArrayCur;
                    }               
               
                    StateArrayCur.CurNode = DELETE;       //-1表示从StateCur中删掉   
                }            
            }
            NewStateArray[NewStateCount] = MinState;
            NewStateCount = NewStateCount + 1;
        
        }   
    }            
    for ( k =0; k = 0; i--){
        printf(" %d ", (StateArrayCur[MinIndex].LeftNode + 1));
    }
    printf(" 1 \n");
    return 0;
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/63043/showart_1686548.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2