图
采用邻接矩阵和邻接表两种方式表示图
基本操作:
- 根据数据文件创建图;
- 寻找指定名称的节点编号;
- 以邻接表or邻接矩阵的形式显示图;
- DFS的递归与非递归实现;
- BFS;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define INF 9999
#pragma warning(disable:4996)
typedef struct arc//弧
{
int index;//指向节点编号
int weight;//边的权值
struct arc *next;
}AR;
typedef struct MyGraph//图(包含邻接矩阵和邻接表)
{
int type;//0表示无向图,1表示有向图
int arcnum,vexnum;//边的个数、顶点个数
char **vexname;//存放顶点名称的二维数组
AR *N;//表头数组
int **A;//邻接矩阵
}GH;
int findvex(char *s,GH *G);//找到图G中名称为s的节点编号,并将其返回
void createGraph(GH *G);//创建图G
void showGraph(GH *G);//以邻接表的形式显示图G
void showMatrix(GH *G);//显示邻接矩阵
void DFSvisit1(GH *G);//非递归实现
void DFSvisit2(GH *G);//递归主调函数
void DFS(int index,int *visit,GH *G);//递归函数
void BFSvisit(GH *G);
main()
{
GH *G;
G=(GH *)malloc(sizeof(GH));
createGraph(G);
printf("图的邻接表形式如下:\n");
showGraph(G);
printf("邻接矩阵:\n");
showMatrix(G);
printf("\nDFS遍历结果为:\n");
DFSvisit1(G);
printf("\nDFS遍历结果为:\n");
DFSvisit2(G);
printf("\nBFS遍历结果为:\n");
BFSvisit(G);
free(G);
}
int findvex(char *s,GH *G)//找到图G中名称为s的节点编号,并将其返回
{
for(int i=0;i<G->vexnum;i++)
{
if(strcmp(s,G->vexname[i])==0)//找到匹配节点
return i;
}
printf("该点不存在.\n");
exit(-1