#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
typedef struct point{
int num;
struct point *brother;
struct point *child;
}Point;
void printRoute(Point *p)
{
<span style="white-space:pre"> </span>if(p->child != NULL)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>printRoute(p->child);
<span style="white-space:pre"> </span>}
<span style="white-space:pre"> </span>printf("%d ",p->num);
<span style="white-space:pre"> </span>if(p->brother != NULL)
<span style="white-space:pre"> </span>{
<span style="white-space:pre"> </span>printRoute(p->brother);
<span style="white-space:pre"> </span>}
}
int main()
{
int choose[N];
int c[N][N];
int i,j;
srand(time(NULL));
for(i = 0 ; i < N ; i++)
{
choose[i] = 0;
for(j = 0 ; j < N ; j++)
{
c[i][j] = rand()%10+1;
}
}
printf("各个城市之间的距离:\n");
for(i = 0 ; i < N ; i++)
{
for(j = 0 ; j < N ; j++)
printf("%d ",c[i][j]);
printf("\n");
}
Point node[N];
node[0].num = 0;
node[0].child = NULL;
node[0].brother = NULL;
choose[0] = 1;
for(i = 1 ; i < N ; i++)
{
int m = 0;
int n ;
int k;
for(k = 0 ; k < N ; k++)
{
if(choose[k] == 0)
{
n = k;
break;
}
}
for(j = 0 ; j < i ; j++)
{
for(k = 0 ; k < N ; k++)
{
if(choose[k] == 0 && c[node[j].num][k] < c[node[m].num][n])
{
m = j;
n = k;
}
}
}
node[i].num = n;
node[i].child = NULL;
node[i].brother = NULL;
choose[n] = 1;
if(node[m].child == NULL)
node[m].child = &node[i];
else {
Point *p = node[m].child;
while(p->brother != NULL)
p = p->brother;
p->brother = &node[i];
}
}
printf("旅行商遍历路线:\n");
printRoute(&node[0]);
return 0;
}