|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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[MAXVEX];
- int numVertexes;
- int numEdges;
- };
- void CreateOList(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[i].vex;
- g->list[i].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[j].vex)
- {
- viPos = j;
- }
- if(vj == g->list[j].vex)
- {
- vjPos = j;
- }
- if(viPos != -1 && vjPos != -1)
- {
- break;
- }
- }
- e = new EdgeTableNode;
- e->iVex = viPos;
- e->jVex = vjPos;
- //头插法
- e->iLink = g->list[viPos].first;
- g->list[viPos].first = e;
- e->jLink = g->list[vjPos].first;
- g->list[vjPos].first = e;
- }
- }
- void main()
- {
- OListGraph *g = new OListGraph;
- CreateOList(g);
- system("pause");
- }
复制代码
这是我写的创建邻接多重表的代码,但是测试后有问题,想了半天都不知道要怎么更改,问题就是iLink和jLink不能按照邻接多重表中的定义去指向网上的代码我看过,执行出来的结果和我一样,所以我就想不明白了
问题自己解决了,只是我犯傻了,只要在初始化的时候都为first创建一个头结点,并且头插法改为尾插法问题就解决了 |
|