由参考资料可知,使用CGraph类可以方便地实现graph,并使用DFS或BFS算法解决典型的最短路径问题。对于以下问题,只需将距离信息表格转化为一个对应的有向图,并对图执行BFS算法即可,具体步骤如下:
|0|2|7|INF|INF| |INF|0|1|6|INF| |INF|INF|0|INF|5| |INF|INF|12|0|8| |INF|INF|INF|INF|0|
则创建对象的代码如下:
CGraph graph(5);
|0 | 2 | 7 |INF|INF| |INF| 0 | 1 | 6 |INF| |INF|INF| 0 |INF| 5 | |INF|INF|12 | 0 | 8 | |INF|INF|INF|INF| 0 |
在CGraph对象中,边权值的保存方式为邻接矩阵,所以将表格中的距离值转换为边权值只需将INF对应为0,其余非INF值不变即可,转换后的表格如下:
|0|2|7| 0| 0| |0|0|1| 6| 0| |0|0|0| 0| 5| |0|0|12|0| 8| |0|0| 0| 0| 0|
将表格转换为CGraph对象的代码如下:
for(int i = 0; i < 5; i++) { for(int j = 0; j < 5; j++) { if(distance[i][j] != 0) {//i j 不相连接 graph.InsertEdge(i,j);//添加边 graph.m_Data[i][j]=distance[i][j];//将表格中距离作为边权值 graph.m_Data[j][i]=distance[j][i];//无向图中对称 }
}
}
完整代码如下:(假设修订完成可以运行)