大家好,下面是在下看了一些书籍以及自己改造的代码,可能有错,也可能有些不妥,所以请见谅!
/// head.h ///
#include <iostream>
using namespace std;
#define MAX_SIZE 20
///边 结点的定义
struct ArcNode
{
int adjvex; ///adj译文“邻接” vex译文”顶点“ 表示改弧所指向的顶点的位置
ArcNode *nextArc; ///下一条弧
int info; ///弧上所示的权重
};
typedef ArcNode arcNode;
///头 结点的定义
struct VNode
{
char data[5]; ///结点上的信息
ArcNode *firstArc; ///第一条依附的弧
};
typedef VNode vNode;
typedef VNode AdjList[MAX_SIZE];
///有向图的定义
struct ALGraph
{
AdjList vertices;
int vecNum, arcNum;
};
void createGraph(ALGraph &G)
{
ArcNode *p;
int v1, v2,wei;
cout<<"请输入有线图的顶点数:";
cin>>G.vecNum;
cout<<"请输入有向图的边数:";
cin>>G.arcNum;
for( int i=0; i<G.vecNum; i++)
{
cout<<"输入顶点信息:";
cin>>G.vertices[i].data;
}
for(int i=0; i<G.vecNum; i++)
{
G.vertices[i].firstArc=NULL;/记得把每一个都初始化,不然下面打印会出错
}
///构造边表
for( int i=0; i<G.vecNum; i++)
{
p = ( ArcNode* ) malloc ( sizeof(ArcNode) );
if(!p)
exit(-1);
cout<<"输入弧头(整型):";
cin>>v1;
cout<<"输入弧尾(整型):";
cin>>v2;
cout<<"输入这条弧所占的权重(整型):";
cin>>wei;
p->adjvex=v2;
p->info=wei;
p->nextArc=G.vertices[v1].firstArc;
G.vertices[v1].firstArc=p;
}
}
void printfGrpah(ALGraph G)
{
ArcNode *p;
cout<<"\n边表打印\n";
for(int i=0; i<G.vecNum; i++)
{
cout<<i<<" "<<G.vertices[i].data<<"==>";
p=G.vertices[i].firstArc;
while(p!=NULL)
{
cout<<"-->"<<p->adjvex;
p=p->nextArc;
}
cout<<endl;
}
}
// main.cpp ///
#include "head.h"
void createGraph(ALGraph &G);
void printfGrpah(ALGraph G);
void main()
{
ALGraph G;
createGraph(G);
printfGrpah(G);
}