鱼C论坛

 找回密码
 立即注册
查看: 3046|回复: 1

关于邻接多重表的问题

[复制链接]
发表于 2015-5-27 23:24:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Aagxe 于 2015-5-28 15:21 编辑



  1. #include "stdafx.h"
  2. #include <iostream>
  3. #include <windows.h>
  4. using namespace std;

  5. #define MAXVEX 100

  6. typedef struct EdgeTableNode        //边表结构
  7. {
  8.     int            iVex;
  9.     int            jVex;
  10.     EdgeTableNode *iLink;
  11.     EdgeTableNode *jLink;
  12. } InOutEdgeNode;

  13. typedef struct VertexNode
  14. {
  15.     char vex;
  16.     EdgeTableNode *first;
  17. } OrthogonalList, OList;

  18. struct OListGraph
  19. {
  20.     OList list[MAXVEX];
  21.     int numVertexes;
  22.     int numEdges;
  23. };

  24. void  CreateOList(OListGraph *g)
  25. {
  26.     cout << "输入顶点数和边数,空格间隔:" << endl;
  27.     cin >> g->numVertexes >> g->numEdges;

  28.     EdgeTableNode *e,*temp;

  29.     cout << "输入顶点元素,空格间隔:" << endl;

  30.     for(int i = 0; i < g->numVertexes; i++)
  31.     {
  32.         cin >> g->list[i].vex;
  33.         g->list[i].first = nullptr;
  34.     }


  35.     char vi, vj;
  36.     int viPos, vjPos;

  37.     for(int i = 0; i < g->numEdges; i++)
  38.     {
  39.         cout << "按顺序输入边,空格间隔" << endl;
  40.         cin >> vi >> vj;

  41.         viPos = -1;
  42.         vjPos = -1;

  43.         for(int j = 0; j < g->numVertexes; j++)        //找到输入边对应的顶点下标,然后转换
  44.         {
  45.             if(vi == g->list[j].vex)
  46.             {
  47.                 viPos = j;
  48.             }

  49.             if(vj == g->list[j].vex)
  50.             {
  51.                 vjPos = j;
  52.             }

  53.             if(viPos != -1 && vjPos != -1)
  54.             {
  55.                 break;
  56.             }
  57.         }

  58.         e = new EdgeTableNode;
  59.         e->iVex = viPos;
  60.         e->jVex = vjPos;

  61.         //头插法
  62.         e->iLink = g->list[viPos].first;
  63.         g->list[viPos].first = e;

  64.         e->jLink = g->list[vjPos].first;
  65.         g->list[vjPos].first = e;
  66.     }
  67. }

  68. void main()
  69. {
  70.     OListGraph *g = new OListGraph;
  71.     CreateOList(g);

  72.     system("pause");
  73. }
复制代码


这是我写的创建邻接多重表的代码,但是测试后有问题,想了半天都不知道要怎么更改,问题就是iLink和jLink不能按照邻接多重表中的定义去指向网上的代码我看过,执行出来的结果和我一样,所以我就想不明白了

问题自己解决了,只是我犯傻了,只要在初始化的时候都为first创建一个头结点,并且头插法改为尾插法问题就解决了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-5-28 09:27:07 | 显示全部楼层
:sad
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-23 00:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表