马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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创建一个头结点,并且头插法改为尾插法问题就解决了 |