图的存储
1.邻接矩阵
数据类型
typedef int VType;
typedef struct
{
//存储顶点信息
VType v[N];
//存储顶点间逻辑关系
int matrix[N][N];
}Graph;
图的操作
1.创建图
Graph *greate_graph()
{
为图在堆区分配空间,空间全清0,g保存首地址
将顶点编号填入
for(i = 0;i < N;i++)
{
g->v[i] = i;
}
返回g
}
输入边
void input_edge(Graph *g)
{
int i = 0,j = 0;
//(V0,V1) (V0,V2) ...
while(scanf("(V%d,V%d) ",&i,&j) == 2)
{
//getchar();
g->matrix[i][j] = g->matrix[j][i] = 1;
}
}
输出邻接矩阵
void print_matrix(Graph *g)
{
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#define N 5
typedef int VType;
typedef struct
{
VType v[N];
int matrix[N][N];
}Graph;
Graph *create_graph()
{
Graph *g = NULL;
int i = 0;
g = (Graph *)malloc(sizeof(Graph));
//memset(g,0,sizeof(Graph));
bzero(g,sizeof(Graph));
for(i = 0;i < N;i++)
{
g->v[i] = i;
}
return g;
}
void input_edge(Graph *g)
{
int i = 0,j = 0;
printf("Input edge like (V0,V1) (V0,V2) ...\n");
//(V0,V1) (V0,V2) (V0,V3) ...
while(scanf("(V%d,V%d) ",&i,&j) == 2)//scanf字符串中空白符在输入时可跳过空白符
{
//getchar();
g->matrix[i][j] = g->matrix[j][i] = 1;
}
//清输入缓冲区
while(getchar() != '\n');
return ;
}
void print_matrix(Graph *g)
{
int i = 0,j = 0;
printf("%-4c",' ');
for(i = 0;i < N;i++)
{
printf("V%-3d",i);
}
putchar('\n');
for(i = 0;i < N;i++)
{
printf("V%-3d",i);
for(j = 0;j < N;j++)
{
printf("%-4d",g->matrix[i][j]);
}
putchar('\n');
}
return ;
}
int main()
{
Graph *g = NULL;
g = create_graph();
input_edge(g);
print_matrix(g);
input_edge(g);
puts("=============================");
print_matrix(g);
return 0;
}