数据结构 邻接矩阵 DFS

来源:互联网 发布:windows xp开机蓝屏 编辑:程序博客网 时间:2024/06/02 06:28
#include <stdio.h>
#define MAXNODE 20
typedef struct 
{
char vertexs[MAXNODE];
int acrs[MAXNODE][MAXNODE];
int vexnum,acrnum;
}GraphType;
int visited[MAXNODE];//全局声明变量。用来标记访问过的顶点
void CreateDNG(GraphType*G);//创建邻接矩阵的无向图
int LocatedVex(GraphType*G,char v);//查找顶点在一维数组里的位置
void dfsTraverse(GraphType*G);//非连接图的深度遍历
void DFS(GraphType*G,int v);//深度遍历
int main(void)
{
GraphType G;
CreateDNG(&G);
dfsTraverse(&G);
return 0;
}
int LocatedVex(GraphType*G,char v)
{
int i,k=-1;
for(i=0;i<G->vexnum;i++)
if(v==G->vertexs[i])
{
k=i;
break;
}
return k;
}
void CreateDNG(GraphType*G)
{
int i,j,k;
char a,b;
printf("请输入顶点和边的个数:");
scanf("%d %d",&G->vexnum,&G->acrnum);
getchar();
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
G->acrs[i][j]=0;//初始化
printf("请输入顶点的信息:");
for(i=0;i<G->vexnum;i++)
{
scanf("%c",&(G->vertexs[i]));
}
printf("请输入相关联的顶点:");
for(k=0;k<G->acrnum;k++)
{
scanf("%c,%c",&a,&b);
i= LocatedVex(G,a);
j= LocatedVex(G,b);
G->acrs[i][j]=1;
G->acrs[j][i]=1;
}
return ;
}
void dfsTraverse(GraphType*G)
{
int i;
for(i=0;i<G->vexnum;i++)
visited[i]=0;//所有顶点没有被访问过
for(i=0;i<G->vexnum;i++)
if(!visited[i])
DFS(G,i);
return ;
}
void DFS(GraphType*G,int v)
{
int i;
printf("当前访问的顶点为:%c\n",G->vertexs[v]);
visited[v]=1;
for(i=0;i<G->vexnum;i++)
if(!visited[i]&&G->acrs[v][i]==1)
DFS(G,i);
return ;
}
0 0
原创粉丝点击