建立图的邻接矩阵和邻接表;
以邻接表作存储结构,分别对图输出深度优先搜索和广度优先搜索遍历序列;
步骤:
1.在键盘上输入,建立一个无向图
此无向图的结构如下图:
2.输出广度、深度优先搜索遍历序列
#include <bits/stdc++.h>
#define MAXVEX 100
#define INFINITY -1
int visited[MAXVEX]={0};
typedef struct
{
char vexs[MAXVEX];
int arc[MAXVEX][MAXVEX];
int numVertexes, numEdges;
}Graph;
void CreateGraph(Graph *g)
{ int i,j,k,w,t = 1;
scanf("%d %d", &(g->numVertexes), &(g->numEdges));
// printf("\n");
for(i=1;i<=g->numVertexes;i++)
{
getchar();
scanf("%c",&(g->vexs[i]));
}
//printf("\n");
for(i=1;i<=g->numVertexes;i++)
for(j=1;j<=g->numVertexes;j++)
if (t>2) g->arc[i][j] = INFINITY;
else g->arc[i][j]=0;
for(k=1;k<=g->numEdges;k++)
{
scanf("%d %d",&i,&j);
if(i>g->numVertexes ||j>g->numVertexes) exit(0);
if(t>2)
{
scanf("%d",&w);
g->arc[i][j]=w;
if(t==3) g->arc[j][i]=w;
}
else
{ g->arc[i][j]=1;
if (t==1) g->arc[j][i]=1;
}
}
//printf("\n");
}
void dfs (Graph g,int i)
{
int j;
printf("%d->",i);
visited[i]=1;
for(j=1; j<=g.numVertexes; j++)
if ((g.arc[i][j]==1)&&(!visited[j]))
dfs (g,j);
}
void bfs (Graph g,int i)
{
int visited[MAXVEX]={0};
int q[g.numVertexes+1] ;
int f,r,j ;
f=r=0 ;
printf("%d->",i);
visited[i]=1 ;
r++;
q[r]=i ;
while (f<r)
{ f++; i=q[f] ;
for (j=1; j<=g.numVertexes; j++)
if ((g.arc[i][j]==1)&&(!visited[j]))
{ printf("%d->",j); ; visited[j]=1 ; r++; q[r]=j ; }
}
}
int main()
{
Graph g;
int i;
CreateGraph(&g);
printf("\n深度优先搜索遍历:");
dfs (g,1);
printf("NULL\n");
printf("广度优先搜索遍历:");
bfs (g,1);
printf("NULL\n");
return 0;
}
结果截图: