从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历
图的遍历方法有两种,一种叫深度优先遍历(DFS),另一种叫广度优先遍历(BFS).
图的邻接矩阵表示
通常图的表示有两种方法:邻接矩阵,邻接表。
两种方法各有各的好处。
没啥好说的直接上代码
邻接表
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
#define INIFINITY 65535
int visited[MAX]; //访问标志数组
/*邻接表结构*/
typedef char VertexType; //顶点类型
typedef int EdgeType; //权值类型
/*边表结点*/
typedef struct EdgeNode
{
int adjvex; //邻接点域,保存邻接点下标
struct EdgeNode *next; //链域,指向下一个邻接点
}EdgeNode;
typedef struct VertexNode
{
VertexType data; //顶点域
EdgeNode *firstedge; //边表头指针
}VertexNode,AdjList[MAX];
typedef struct
{
AdjList adjList;
int numVertexes,numEdges; //顶点数量和边数量
}GraphAdj;
/*邻接表创建*/
void create(GraphAdj &G)
{
int i,j,k;
EdgeNode *e;
printf("输入顶点数,边数:");
scanf("%d%d",&G.numVertexes,&G.numEdges);
getchar();
//printf("%d",G->numVertexes);
for(i=0;i<G.numVertexes;i++) //建立顶点表
{
printf("第(%d)个顶点: " ,i);
scanf("%c",&G.adjList[i].data);
getchar();
G.adjList[i].firstedge=NULL; //注意将边表置空
}
//printf("