数据结构整理-图的创建-求度-深度优先遍历-广度优先遍历
图的创建
定义邻接矩阵的数据类型
typedef struct
{
int arcs[MAXVEX][MAXVEX];
char vex[MAXVEX];
int vexnum;
int arcnum;
}AdjMatrix;
用邻接矩阵创建图
int LocateVex(AdjMatrix* G, char v)
{
int i;
for (i = 0; i < G->vexnum; i++)
{
if (G->vex[i] == v)
return i;
}
return 0;
}
void Create(AdjMatrix *G)
{
int i, j, k;
char vex1, vex2;
printf("输入图中的顶点数和边数:\n");
scanf("%d%d", &G->vexnum, &G->arcnum);
getchar();
for (i = 0; i < G->vexnum; i++)
{
for (j = 0; j < G->vexnum; j++)
{
G->arcs[i][j] = 0;
}
}
for (i = 0; i < G->vexnum; i++)
{
printf("输入顶点的信息:\n");
scanf("%c", &G->vex[i]);
}
for (i = 0; i < G->arcnum; i++)
{
getchar();
scanf("%c%c", &vex1, &vex2);
j = LocateVex(G, vex1);
k = LocateVex(G, vex2);
G->arcs[j][k] = 1;
}
}
求有向图的出度,入度
求出度
int VexOD(AdjMatrix* G, int vex)
{
int count = 0;
int i;
for (i = 0; i < G->vexnum; i++)
{
if (G->arcs[vex][i] == 1)
count++;
}
return count;
}
求入度
int VexID(AdjMatrix* G, int vex)
{
int count = 0;
int i;
for (i = 0; i < G->vexnum; i++)
{
if (G->arcs[i][vex] == 1)
count++;
}
return count;
}
图的遍历
深度优先遍历
int visited[MAXVEX] = {
0 };
int FirstAdjVex(AdjMatrix* G, int v0)
{
int i;
for (i = 0; i < G->vexnum; i++)
{