问题描述:
输入:
建立图的存储结构:顶点和边(弧),例:无向图G的顶点V={A,B,C,D,E,F,G,H},边E={(A,B),(A,C),(B,D),(B,E),(C,F),(C,G),(D,H),(E,H),(F,G)}(G具有8个顶点和9条边)
输出:
深度优先遍历的顶点序列(按照存储结构):A,B,D,H,E,C,F,G(或者其它的不同顺序的序列)`
c语言实现代码:
#include <stdio.h>
#define Max 10
typedef char VertexType;
typedef int EdgeType;
typedef struct
{
VertexType vexs[Max]; // 顶点信息
EdgeType edges[Max][Max];//边和弧的信息
int n; //当前图顶点数
int e; //当前边数
}MGraph;
void createGraph(MGraph *G){//创建图
int i,j,n,e,a,la,k;
char ex;
printf("请输入图的顶点数(小于10):\n");
scanf("%d",&n);
G->n=n;
printf("请输入所有顶点的信息(如:a b):\n");
getchar();
for(i=0;i<n;i++){
scanf("%c",&G->vexs[i]);
getchar();
}
printf("请输入图的边数:");
scanf("%d",&e);
G->e=e;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
//printf("%c和%c:",G->vexs[i],G->vexs[j]);
// scanf("%d",&a);
G->edges[i][j]=0;
}
}
printf("请输入边的信息(若两点相连就输入 1):\n");
for(i=0;i<n;i++){
printf("%c和几个点相连请输入:",G->vexs[i]);
scanf("%d",&la);
printf("%c和哪些点相连请输入(如:a b):",G->vexs[i]);
getchar();
for(k=0;k<la;k++){
scanf("%c",&ex);
getchar();
G->edges[i][ex-'a']=1;
}
}
}
void prinG(MGraph *G){//输出矩阵
int i,j;
for(i=0;i<G->n;i++){
printf(" %c",G->vexs[i]);
}
printf("\n");
for(i=0;i<G->n;i++){
printf("%c",G->vexs[i]);
for(j=0;j<G->n;j++){
printf(" %d",G->edges[i][j]);
}
printf("\n");
}
}
void DFT(MGraph *G,int visited[]){ //深度遍历
int i;
for(i=0;i<G->n;i++){
DFTcore(G,i,visited);
}
printf("\n");
}
int DFTcore(MGraph *G,int i,int visited[]){ //递归查找
int j;
if(visited[i] == 1){
return;
}
printf("%c ",G->vexs[i]);
visited[i] =1;
for(j=0;j<G->n;j++){
if(G->edges[i][j]==1){
DFTcore(G,j,visited);
}
}
}
int main(){
MGraph G;
int visited[Max]={0};
createGraph(&G);
prinG(&G);
printf("进行深度遍历:");
DFT(&G,&visited);
return 0;
}
代码用作自己储存,同时希望对你有帮助