main.cpp
#include <iostream>
#include"graphNode.h"
using namespace std;
int main()
{
algraph adj;
int i;
arcnode *p;
printf("\n创建邻接表表示的图:\n");
create_algraph(adj);
printf("\n\n\n图的邻接链表显示:\n");
for(i=0;i<adj.vexnum;i++)
{
printf("<%d> %d ",i,adj.adjlist [i].data );
p=adj.adjlist [i].firstarc ;
while(p!=NULL)
{
printf("-> %d",p->adjvex );
p=p->next ;
}
printf("->NULL \n");
}
// Mgraph mg,*g;
// int i,j;
// g=&mg;
// create_mgraph(g);
// printf("\n\n图的邻接矩阵显示:\n");
// for(i=1;i<=g->vexnum;i++)
// {
// for(j=1;j<=g->vexnum;j++)
// printf("<%d ,%d> [%d] ",i,j,mg.arcs [i][j]);
// printf("\n");
// }
return 0;
}
graph.h 邻接矩阵存储
#include<iostream>
#define Vextype int
#define Adjtype int
#define Maxlen 40
#include <stdio.h>
#include <malloc.h>
using namespace std;
typedef struct
{
Vextype vexs[Maxlen];//顶点的集合
Adjtype arcs[Maxlen][Maxlen];//边的集合
int vexnum,arcnum;//顶点数和边数
int kind;//图的种类(有向图、有向网、无向图、无向网)
}Mgraph;
Mgraph create_mgraph(Mgraph *G)
{//采用邻接矩阵表示法,创建无向图G
int i,j,k;
printf("输入总顶点数:\n");
scanf("%d",&i);
printf("输入总边数:\n");
scanf("%d",&j);
G->vexnum=i;
G->arcnum=j;
for(i=1;i<=G->vexnum;i++){
printf("第%d结点的信息:",i);
scanf("%d",&G->vexs[i]);
}
for(i=1;i<=G->vexnum;i++){
for(j=1;j<=G->vexnum;j++){
G->arcs[i][j]=0;//初始化邻接矩阵
}
}
for(k=0;k<G->arcnum;k++){
printf("输入第%d条边的起点和终点的编号:",k);
scanf("%d,%d",&i,&j);
while(i<1||i>G->vexnum+1||j>G->arcnum+1){
printf("编号超出范围,请重新输入");
scanf("%d,%d",&i,&j);
}
G->arcs[i][j]=1;
G->arcs[j][i]=1;
}
}
graphNode.h 邻接链表存储
#define Vextype int
#define Adjtype int
#define Maxlen 40
#include <stdio.h>
#include <malloc.h>
#include<iostream>
using namespace std;
typedef struct arcnode //表结点
{
int adjvex;
struct arcnode *next;
}arcnode;
typedef struct //头结点
{
Vextype data;
arcnode *firstarc;
}vnode;
typedef struct//邻接表
{
vnode adjlist[Maxlen];
int vexnum,arcnum;
int kind;
}algraph;
algraph create_algraph(algraph &G)
{//采用邻接表表示法,创建无向图G
int i,v1,v2;
cout<<"节点个数及边数";
cin>>G.vexnum>>G.arcnum;
for(i=0;i<G.vexnum;i++){
cout<<"enter vex:";
cin>>G.adjlist[i].data;
G.adjlist[i].firstarc=NULL;
}
for(i=0;i<G.arcnum;i++){
cout<<"enter vexes for arc:";
cin>>v1>>v2;
arcnode *p1=new arcnode;
arcnode *p2=new arcnode;
p1->adjvex=v2;
p2->adjvex=v1;
p1->next=G.adjlist[v1].firstarc;
G.adjlist[v1].firstarc=p1;
p2->next=G.adjlist[v2].firstarc;
G.adjlist[v2].firstarc=p2;
}
}