Aagxe 发表于 2015-5-27 23:24:01

关于邻接多重表的问题

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




#include "stdafx.h"
#include <iostream>
#include <windows.h>
using namespace std;

#define MAXVEX 100

typedef struct EdgeTableNode        //边表结构
{
    int            iVex;
    int            jVex;
    EdgeTableNode *iLink;
    EdgeTableNode *jLink;
} InOutEdgeNode;

typedef struct VertexNode
{
    char vex;
    EdgeTableNode *first;
} OrthogonalList, OList;

struct OListGraph
{
    OList list;
    int numVertexes;
    int numEdges;
};

voidCreateOList(OListGraph *g)
{
    cout << "输入顶点数和边数,空格间隔:" << endl;
    cin >> g->numVertexes >> g->numEdges;

    EdgeTableNode *e,*temp;

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

    for(int i = 0; i < g->numVertexes; i++)
    {
      cin >> g->list.vex;
      g->list.first = nullptr;
    }


    char vi, vj;
    int viPos, vjPos;

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

      viPos = -1;
      vjPos = -1;

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

            if(vj == g->list.vex)
            {
                vjPos = j;
            }

            if(viPos != -1 && vjPos != -1)
            {
                break;
            }
      }

      e = new EdgeTableNode;
      e->iVex = viPos;
      e->jVex = vjPos;

        //头插法
        e->iLink = g->list.first;
        g->list.first = e;

        e->jLink = g->list.first;
        g->list.first = e;
    }
}

void main()
{
    OListGraph *g = new OListGraph;
    CreateOList(g);

    system("pause");
}


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

问题自己解决了,只是我犯傻了,只要在初始化的时候都为first创建一个头结点,并且头插法改为尾插法问题就解决了

溯月0503 发表于 2015-5-28 09:27:07

:sad
页: [1]
查看完整版本: 关于邻接多重表的问题