首先去找一张学校的地图,并且自己配置好数据和路线
在代码里面写好数据
//地点信息
char _mapName[32][50] = {"行政楼","实验楼D", "教学楼A", "篮球场", "足球场", "A4", "实验楼C", "教学楼B", "A2", "A6", "计算机系", "苏果超市",
"果曼优品", "实验楼A", "教学楼C", "图书馆", "一食堂", "D2", "D8", "C4", "中国联通", "羽毛球场", "网球场",
"B5", "B7", "D4", "D6", "C8", "C6", "三食堂", "一鸣真鲜奶吧","B11"};
//距离信息,_distance[0][1] = 50;代表从下标为0到下表为1地点距离为50
int _distance[32][32] = {0};
然后是图的结构,仅仅与不带权邻接表在边表结点相差一个weight
//边表结点
typedef struct EdgeNode {
//顶点对应的下标
int adjvex;
//权值
int weight;
//指向下一个邻接点
struct EdgeNode *next;
} edgeNode;
//顶点表结点
typedef struct VertexNode {
//顶点数据
char data[50];
//边表头指针
edgeNode *firstedge;
} VertexNode, AdjList[100];
//集合
typedef struct {
AdjList adjList;
//顶点数和边数
int numVertexes, numEdges;
} GraphAdjList;
初始化地图距离信息
//初始化地图基本数据
void AdjacencyList::InitMap(GraphAdjList *G) {
//输入顶点数和边数
G->numVertexes = 32;
G->numEdges = 59;
_distance[0][2] = 60;
_distance[1][2] = 190;
_distance[1][7] = 210;
_distance[1][6] = 70;
_distance[2][7] = 80;
_distance[2][16] = 320;
_distance[2][3] = 120;
_distance[3][7] = 100;
_distance[3][14] = 170;
_distance[3][4] = 80;
_distance[4][11] = 180;
_distance[4][8] = 90;
_distance[4][5] = 140;
_distance[5][9] = 70;
_distance[6][7] = 220;
_distance[6][10] = 50;
_distance[7][10] = 210;
_distance[7][14] = 90;
_distance[7][16] = 260;
_distance[8][11] = 110;
_distance[8][9] = 60;
_distance[9][11] = 110;
_distance[10][17] = 190;
_distance[10][13] = 50;
_distance[11][16] = 80;
_distance[11][12] = 90;
_distance[12][16] = 100;
_distance[13][17] = 160;
_distance[13][18] = 170;
_distance[13][15] = 120;
_distance[13][14] = 190;
_distance[14][15] = 80;
_distance[14][16] = 210;
_distance[15][18] = 140;
_distance[15][20] = 200;
_distance[15][21] = 170;
_distance[16][21] = 200;
_distance[16][23] = 80;
_distance[17][25] = 60;
_distance[17][18] = 70;
_distance[18][26] = 70;
_distance[18][19] = 120;
_distance[19][20] = 60;
_distance[20][21] = 100;
_distance[20][22] = 110;
_distance[20][27] = 130;
_distance[20][28] = 120;
_distance[21][22] = 90;
_distance[22][29] = 120;
_distance[22][30] = 110;
_distance[22][24] = 110;
_distance[23][24] = 80;
_distance[24][30] = 40;
_distance[25][26] = 80;
_distance[26][27] = 80;
_distance[28][29] = 80;
_distance[29][31] = 180;
_distance[29][30] = 100;
_distance[30][31] = 100;
}
开始创建地图 ,注意,由于我们只赋值了一条边一次值,但从常理上说,他应该有2次,因为无向邻接表就是双向邻接表,所以我们创建地图算法要多做一下判定。
//创建地图
void AdjacencyList::CreateALGraph(GraphAdjList *G) {
edgeNode *e;
//读入顶点信息,建立顶点表
for (int i = 0; i < G->numVertexes; i++)
{
//读入顶点信息
strcpy(G->adjList[i].data, _mapName[i]);
//将边表置为空表
G->adjList[i].firstedge = NULL;
}
//建立边表(头插法)
for (int i = 0; i < G->numVertexes; i++)
{
for (int j = 0; j < i; j++)
{
int temp;
if (_distance[i][j] != 0 || _distance[j][i] != 0)
{
if (_distance[i][j] != 0)
{
temp = _distance[i][j];
}
else
{
temp = _distance[j][i];
}
e = new EdgeNode;
e->adjvex = j;
e->next = G->adjList[i].firstedge;
e->weight = temp;
G->adjList[i].firstedge = e;
e = new EdgeNode;
e->adjvex = i;
e->next = G->adjList[j].firstedge;
e->weight = temp;
G->adjList[j].firstedge = e;
}
}
}
}
运行程序检验是否成功