作业帮 > 综合 > 作业

亲爱的高手们,//城市节点数目 #define N 30 //城市坐标 double C[N][2]={ {2,99},

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/04/28 17:00:00
亲爱的高手们,
//城市节点数目
#define N 30
//城市坐标
double C[N][2]={
{2,99},{4,50},{7,64},{13,40},{18,54},{18,40},{22,60},{24,42},{25,62},{25,38},
{37,84},{41,94},{41,26},{44,35},{45,21},{54,67},{54,62},{58,35},{58,69},{62,32},
{64,60},{68,58},{71,44},{71,71},{74,78},{82,7},{83,46},{83,69},{87,76},{91,38}
};
//蚂蚁数量
#define M 30
//矩阵表示两两城市之间的距离
double allDistance[N][N];
int Tour[N][2];//当前路径
//计算两个城市之间的距离
double calculateDistance(int i,int j)
{
return sqrt(pow((C[i][0]-C[j][0]),2.0) + pow((C[i][1]-C[j][1]),2.0));
}
//由矩阵表示两两城市之间的距离
void calculateAllDistance()
{
for(int i = 0; i < N; i++)
{
for(int j = 0; j < N; j++)
{
if (i = j)
{
allDistance[i][j] = calculateDistance(i,j);
allDistance[j][i] = allDistance[i][j];
}
}
}
}
//获得经过n个城市的路径长度
double calculateSumOfDistance(int* tour)
{
double sum = 0;
for(int i = 0; i< N ;i++)
{
int row = *(tour + 2 * i);
int col = *(tour + 2* i + 1);
sum += allDistance[row][col];
}
return sum;
}
其中
int row = *(tour + 2 * i);
int col = *(tour + 2* i + 1);这个里面的row 为什么要给i*2?代表坐标,还是分别代表两个城市?
int* tour; 该指针 是指向int Tour[N][2]; 指针吧?这样的话在Tour 两个元素之间跳转就需要i*2 了.由于是每一行的首地址,所以解引用返回的是 Tour 第一维元素值,就是第几个城市.
allDistance[i][j] 保存的就是第i 个城市 和 第 j 个城市的距离
你最好给出int Tour[N][2] 的初始化