1.无向图的邻接矩阵的定义
#define Maxlen 100
#define MAX 32767
#define OK 1
#define ERROR 0
typedef struct AMGraph
{
char arcs[Maxlen];//顶点表
int vex[Maxlen][Maxlen];//边的信息,用来存储权重
int arcnum,vexnum; //顶点的个数,边的个数
}AMGraph;
2.无向图的邻接矩阵创建
int CreateGraph(AMGraph &G)
{
cout<<"请输入顶点的个数>: ";
cin>>G.arcnum;
for(int i =0;i<G.arcnum;i++)
{
cout<<"请输入第"<<i+1<<"个顶点>: ";
cin>>G.arcs[i];
}
cout<<"请输入要插入的边的个数>: ";
cin>>G.vexnum;
for(int i =0;i<G.arcnum;i++)
for(int j=0;j<G.arcnum;j++)
{
G.vexnum[i][j]=MAX;
}
for(int i = 0;i<G.vexnum;i++)
{ char v1,v2;
int w,m,n;
cout<<"请输入要插入第"<<i+1<<"条边的第一个顶点>: ";
cin>>v1;
cout<<"请输入要插入第"<<i+1<<"条边的第二个顶点>: ";
cin>>v2;
cout<<"请输入该边的权重>: ";
cin>>w;
m=Located(G,v1);//Located(AMGraph,char)是找char对应顶点表的下标
n=Located(G,v2);
G.vex[n][m]=w;
G.vex[m][n]=w;
}
return OK;
}
3.无向图的临界表的定义
#define MAXlen 100
#define OK 1;
typedef struct GNode //边节点的结构
{
int num;//对应顶点的下标
struct GNode *next;//指向下一个边节点
int info;//权重
}GNode;
typedef struct ArcNode//顶点的结构
{
char arc;//顶点的数据
GNode *First;//指向第一个边节点
}ArcNode;
typedef struct Graph//图数组的结构
{
ArcNode data[MAXlen];//顶点结构的数组
int vexnum,arcnum;//顶点的数目,边的数目
}Graph;
4.有向图的邻接表的创建
int Create(Graph &G)
{
cout<<"请输入顶点的个数>: ";
cin>>G.arcnum;
for(int i =0;i<G.arcnum;i++)
{
cout<<"请输入第"<<i+1<<"个顶点>: ";
cin>>G.data[i].arc;
}
cout<<"请输入边的个数>: ";
cin>>G.vexnum;
for(int i=0;i<G.vexnum;i++)
{
char v1,v2;
int n,m,w;
cout<<"请输入第"<<i+1<<"条边的第一个节点>: ";
cin>>v1;
cout<<"请输入第"<<i+1<<"条边的第二个节点>: ";
cin>>v2;
cout<<"请输入该边的权重>: ";
cin>>w;
n=Located(G,v1);
m=Located(G,v2);
GNode *newnode;
newnode=new GNode;
newnode->info=w;
newnode->num=m;
newnode->next=G.data[n].First;//采用头插法,插入边的信息
G.data[n].First=newnode;
}
return OK;
}
5.无向邻接表的所有节点的出度
void Node_out(Graph &G)
{
for(int i =0 ;i<G.arcnum;i++)
{
GNode *p = new GNode;
p = G.data[i].First;
char c = G.data[i].arc;
if(p==NULL)
{
cout<<c<<"--"<<endl;
continue;
}
while(p!=NULL)
{
cout<<c<<"-->"<<G.data[p->num].arc<<"边的权重为: "<<p->info;
p = p->next;
}
cout<<endl;
}
}