#include<iostream>
#define MAXSIZE 100
using namespace std;
typedef struct ArcNode
{
int adjvex;
struct ArcNode *next;
int info;
}ArcNode;
typedef struct VNode
{
char data;
ArcNode *firsstarc;
}VNode,AdjList[MAXSIZE];
typedef struct
{
AdjList vertices;
int vexnum,arcnum;
}ALGraph;
int LocateVex(ALGraph G,char v)
{
for(int i=0;i<G.vexnum;i++)
{
if(G.vertices[i].data==v)
return i;
}
}
bool CreatUDG(ALGraph &G)
{
cout<<"输入顶点的个数和边个数:";
cin>>G.vexnum>>G.arcnum;
for(int i=0;i<G.vexnum;i++)
{
cout<<"第"<<i+1<<"个点为:";
cin>>G.vertices[i].data;
G.vertices[i].firsstarc=NULL;
}
for(int k=0;k<G.arcnum;k++)
{
char v1,v2;
cout<<"输入两个相关的点:";
cin>>v1>>v2;
int i=LocateVex(G,v1);
int j=LocateVex(G,v2);
ArcNode *p1;
p1=new ArcNode;
p1->adjvex=j;
p1->next=G.vertices[i].firsstarc;
G.vertices[i].firsstarc=p1;
ArcNode *p2;
p2=new ArcNode;
p2->adjvex=i;
p2->next=G.vertices[j].firsstarc;
G.vertices[j].firsstarc=p2;
}
return true;
}
bool visited[MAXSIZE];
void DFS(ALGraph G,int v)
{
cout<<G.vertices[v].data;
visited[v]=true;
ArcNode *p;
p=G.vertices[v].firsstarc;
while(p!=NULL)
{
int w=p->adjvex;
if(!visited[w])
DFS(G,w);
p=p->next;
}
}
int main()
{
ALGraph G;
CreatUDG(G);
int i;
cout<<"进行遍历的出发的顶点为:";
cin>>i;
cout<<"显示如下:"<<endl;
DFS(G,i);
return 0;
}
本代码用C++进行编写,实现图的相关操作,图的创建,以及图的以深度优先进行遍历,深度优先遍历算法(DFS)比较重要,很多实践中会用上。希望可以帮到好友门。