题目:以实验3.1所示邻接矩阵为存储结构,编写程序,实现图的深度、宽度优先遍历。
部分代码:
邻接矩阵的单一顶点DFS:
//邻接矩阵的单一顶点DFS
void DFS(int v,int visited[],mGraph g){
int j;
printf("%d ",v); //访问顶点v
visited[v] = 1; //为顶点v打上访问标记
for(j = 0;j < g.n; j++){ //遍历v的邻接点
if(!visited[j] && g.a[v][j] > 0){ //当未被访问且有权值
DFS(j,visited,g);
}
}
}
邻接矩阵的全图DFS:
//邻接矩阵的全图DFS
void DFSGraph(mGraph g){
int i;
int *visited = (int*)malloc(g.n * sizeof(int)); //动态生成标记数组visted
for(i = 0;i < g.n;i ++){
visited[i] = 0; //visted数组初始化
} //visted数组初始化
for(i = 0;i < g.n;i ++){ //逐一检查每个顶点,若未被访问,则调用DFS
if(!visited[i]){ //当未被访问且有权值
DFS(i,visited,g);
}
}
free(visited); //释放visted数组
}
邻接矩阵的单一顶点BFS:
//邻接矩阵的单一顶点BFS
void BFS(int v,int visited[],mGraph g){
Queue q;
Create(&q,g.n); //初始化队列
visited[v] = 1; //为顶点v打上访问标记
printf("%d ",v); //访问顶点v
EnQueue(&q,v); //将顶点v放入队列
while(!IsEmpty(&q)){
Front(&q,&v);
DeQueue(&q); //队首顶点出队列
for(int i = 0;i < g.n;i ++){ //遍历v的每一项
if(!visited[i] && g.a[v][i] > 0){ //若未被访问且有权值,则将其访问并放入队列,注意这里判断的是g.a[v][i]二维数组