最近在复习数据结构,顺便看看大一的时候写的代码,看完之后比当初有了更加深刻的体会。
希望这些能提供给初学者一些参考。
//图的常用术语
1.邻接点;
2.顶点的度、入度、出度;
3.完全图、稠密图和稀疏图;
4.子图;
5.路径;
6.连通图、连通分量;
7.强连通图、强连通分量;
8.权、网;
//邻接矩阵的存储结构
#define MaxSize 顶点数目
typedef struct
{
VexType vexs[MaxSize]; //顶点数组
int arcs[MaxSize][MaxSize]; //顶点矩阵
int vexnum,arcnum//顶点边弧数
}AdjMatrix;
//建立图的邻接矩阵
typedef char VexType;
void CreateAMgraph(AdjMatrix *g)
{
printf("Please input vexnum and arcnum:\n");
scanf("%d",&g->vexnum);
scanf("%d",&g->arcnum);
getchar();
//建立顶点数组
for(i=0;i<g->vexnum;i++)
scanf("%c",&g->vexs[i]);
//初始化邻接矩阵
for(i=0;i<g->vexnum;i++)
for(j=0;i<g->vexnum;j++)
g->arcs[i][j]=0;
//根据顶点更新矩阵
for(i=0;i<g->vexnum;i++)
{
scanf("%d%d",&i,&j); //输入边(i,j),i,j为顶点序号
arcs[i][j]=1;
arcs[j][i]=1;
}
}
//邻接表的存储结构
#define MaxSize 顶点数目
//边节点
typedef struct ArcNode
{
int adjvex;
struct ArcNode *nextarc;
otherinfo info;
}ArcNode;
//表头节点
typedef struct VertexNode
{
VertexType data;
ArcNode *firstarc;
}VertexNode;
//邻接表节点
typedef struct
{
VertexNode vertex[MaxSize];
int vexnum,arcnum;
}AdjList;
//建立图的邻接表
typedef char VexType;
void CreateALGraph(AdjList *g)
{
printf("Please input vexnum and arcnum:\n");
scanf("%d",&g->vexnum);
scanf("%d",&g->arcnum);
getchar();
//建立表头节点表
for(i=0;i<g->vexnum;i++)
{
scanf("%c",&g->vertex[i].data);
g->vertex[i].firstarc=NULL; //边表置为空
}
//建立边节点
for(k=0;k<g->arcnum;k++)
{
scanf("%d%d",&i,&j); //输入边(i,j),i,j为顶点序号
s=(ArcNode *)malloc(sizeof(ArcNode));
s->adjvex=j;
s->nextarc=g->vertex[i].firstarc;
g->vertex[i].firstarc=s;
s=(ArcNode *)malloc(sizeof(ArcNode));
s->adjvex=i;
s->nextarc=g->vertex[j].firstarc;
g->vertex[j].firstarc=s;
}
}