欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 会展 > [数据结构]无向图的深度优先非递归遍历

[数据结构]无向图的深度优先非递归遍历

2025/2/6 9:56:45 来源:https://blog.csdn.net/Asteroid_PZX/article/details/144469954  浏览:    关键词:[数据结构]无向图的深度优先非递归遍历

采用邻接表存储实现无向图的深度优先非递归遍历。

输入格式:

先输入两个整数(m,n)(分别表示待创建的图顶点数和边数),之后是m个顶点的信息,再之后是n 条边。

输出格式:

对每一组输入,在一行中输出该无向图的深度遍历结果,各个数据之间用一个空格分隔,最后一个数据后也有空格。

输入样例:

在这里给出一组输入。例如:

6 6
a b c d e f
a b
a c
a d
b e
b f
d e

输出样例:

在这里给出相应的输出。例如:

a d e b f c 

 

#include <bits/stdc++.h>
#define MVNum 100
using namespace std;
bool visited[MVNum];
typedef struct ArcNode
{int adjvex;struct ArcNode *nextarc;}ArcNode;
typedef struct VNode
{char data;ArcNode *firstarc;
}VNode,AdjList[MVNum];
typedef struct
{AdjList vertices;int vexnum,arcnum;
}ALGraph;
int LocateVex(ALGraph &G,char v)
{int flag=0;for(int i=0;i<G.vexnum;i++){if(G.vertices[i].data==v){flag=1;return i;}}
}
int CreateDG(ALGraph &G)
{char v1,v2;cin>>G.vexnum>>G.arcnum;for(int i=0;i<G.vexnum;i++){cin>>G.vertices[i].data;G.vertices[i].firstarc=NULL;}for(int i=0;i<G.arcnum;i++){cin>>v1>>v2;int t1=LocateVex(G,v1);int t2=LocateVex(G,v2);ArcNode *p1,*p2;p1=new ArcNode;p1->adjvex=t2;p1->nextarc=G.vertices[t1].firstarc;G.vertices[t1].firstarc=p1;p2=new ArcNode;p2->adjvex=t1;p2->nextarc=G.vertices[t2].firstarc;G.vertices[t2].firstarc=p2;}return 1;
}void DFS(ALGraph G,int vi)
{ArcNode* st[100];int top=-1;int v;ArcNode*p;cout<<G.vertices[vi].data<<" ";visited[vi]=true;top++;st[top]=G.vertices[vi].firstarc;while(top>-1){p=st[top];while(p!=NULL){v=p->adjvex;if(visited[v]==false){cout<<G.vertices[v].data<<" ";visited[v]=true;top++;st[top]=G.vertices[v].firstarc;break;}p=p->nextarc;}if(p==NULL)top--;}
}
void DFSbianli(ALGraph G)
{for(int i=0;i<G.vexnum;i++){visited[i]=false;}for(int i=0;i<G.vexnum;i++)if(!visited[i])DFS(G,i);
}
void PrintG(ALGraph &G)
{ArcNode *p;for(int i=0;i<G.vexnum;i++){cout<<G.vertices[i].data<<":";p=G.vertices[i].firstarc;while(p!=NULL){cout<<p->adjvex+1<<" ";p=p->nextarc;}cout<<endl;}
}
int main()
{ALGraph G;CreateDG(G);//PrintG(G);DFSbianli(G);
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com