1、邻接矩阵的存储表示:用两个数组分别存储顶点表和邻接矩阵

  1. #define MaxInt 996699 //表示极大值,即无穷大
  2. #define MVNum 100 //最大顶点数
  3. typedef char VerTexType //设顶点的数据类型为字符型
  4. typedef int arcType //假设边的权值类型为整型
  5. typedef struct{
  6. VerTextType vexs[MVNum]; //顶点表
  7. ArcType arcs[MVNum][MVNum]; //邻接矩阵
  8. int vexnum, arcnum; //图的当前点数和边数
  9. }AMGraph; //Adjacency Matrix Graph

image.png

  1. //算法6.1 采用邻接矩阵表示法创建无向网
  2. Status CreateUDN(AMGraph &G){
  3. //采用邻接矩阵表示法,创建无向网
  4. cin>>G.vexnum>>G.arcnum; //输入总顶点数,总边数
  5. for(i = 0; i < G.vexnum; ++i)
  6. cin>>G.vexs[i] //依次输入点的信息
  7. for(i = 0; i < G.vexnum; ++i) //初始化邻接矩阵
  8. for(j = 0; j < G.vexnum; ++j)
  9. G.arcs[i][j] = MaxInt; //边的权值均置为极大值
  10. for(k = 0; k < G.arcumm; ++k){ //构造邻接矩阵
  11. cin>>v1>>v2>>w; //输入一条边所依附的顶点及边的权值
  12. i = LocateVex(G, v1);
  13. j = LocateVex(G, v2); //确定v1和v2在G中的位置
  14. G.arcs[i][j] = w; //边<v1, v2>的权值置为w
  15. G.arcs[j][i] = G.arcs[i][j]; //置<v1, v2>的对称边<v2, v1>的权值为w
  16. }//for
  17. return OK;
  18. }//CreateUDN
  1. //补充算法:在图中查找定点
  2. int LocateVex(AMGraph G, VertexType u){
  3. //图G中查找顶点u,存在则返回顶点表中的下表,否则返回-1
  4. int i;
  5. for(i = 0; i < G.vexnum; ++i)
  6. if(u === G.vexs[i])
  7. returni;
  8. returb -1;
  9. }

思路

image.png