[求助]图的深度优先搜索 看哪出错了
#include <stdio.h>#include <malloc.h>
#define MAX 100
int Visit[MAX]={0};
typedef struct {
int vexs[MAX];
int arcs[MAX][MAX];
int vexnum,arcnum;
}AdjMatrix;
int LocateVex(AdjMatrix &G,int u)
{
int j;
for(int i=0;i<G.vexnum;i++)
if(G.vexs[i]==u)
{j=i;break;}
return j;
}
void GreateGraph(AdjMatrix &G)
{
int v1,v2;int a,b;
printf("请输入顶点个数和边数:");
scanf("%d%d",&G.vexnum,&G.arcnum);
for(int i=0;i<G.vexnum;i++)
for(int j=0;j<G.vexnum;j++)
G.arcs[i][j]=0;
printf("请输入顶点元素:");
for(int m=0;m<G.vexnum;m++)
scanf("%d",&G.vexs[m]);
for(int k=0;k<G.arcnum;k++)
{
printf("请输入边:");
scanf("%d%d",&v1,&v2);
a=LocateVex(G,v1);
b=LocateVex(G,v2);
G.arcs[a][b]=G.arcs[b][a]=1;
}
}
int FristAdjVex(AdjMatrix G,int v)
{
int i,j,k;
i=LocateVex(G,G.vexs[v]);
for(j=0;j<G.vexnum;j++)
{
if(G.arcs[i][j]!=0)
{k=j;break;}
}
return k;
}
int NextAdjVex(AdjMatrix G,int v,int w)
{
int i,j,k;
i=LocateVex(G,G.vexs[v]);
for(j=0;j<G.vexnum;j++)
{
if(G.arcs[i][j]!=0&&j!=w)
{k=j;break;}
}
return k;
}
void DFS(AdjMatrix G,int v)
{
printf("%d->",G.vexs[v]);
Visit[v]=1;
for(int w=FristAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))
if(!Visit[w])
DFS(G,w);
}
void main()
{
AdjMatrix G;
GreateGraph(G);
DFS(G,0);
}
这是个无向图 当输入下面的边时 运行结果就不对
(1,2)(1,3)(2,4)(2,5)(4,8)(5,8)(3,6)(3,7)(6,7)
我不知道为什么
哪位大哥能帮我看看 非常感谢