我的错在哪里,输出不了(深度优先搜索算法)
# include<stdio.h># define MAX 32767 //最大值32767
# define MAXVEX_NUM 20 //顶点数 20
typedef struct AreCell {
int adj; //表示用整数表示是否有边,若为32767则无边,若是其它数,则表示有边,则权为这个整数。
}AdjMatrix[MAXVEX_NUM][MAXVEX_NUM]; //表示边的结构体
typedef struct{
char vexs[MAXVEX_NUM];//顶点数组
AdjMatrix arcs;//边
int vexnum,arcnum;//顶点数量和边的数量
}Graph;//图
char v1,v2;//以上是图创建的定义;
int visited[MAXVEX_NUM];//访问标记,1表是访问了,0表是没有访问;
int LocateVex(Graph *G,char v){
int i;
for(i=1;i<G->vexnum+1;i++)
if(G->vexs[i]==v)
return i;
else return -1;
}
void CreateGraph(Graph *G){
int i,j,l,k;
int w;
printf("请输入图的顶点数,边数:\n");
scanf("%d%d",&G->vexnum ,&G->arcnum);
for(i=1;i<G->vexnum+1;i++)//输入顶点
{ printf("输入第%d个顶点\n",i);
scanf("%c",&G->vexs[i]);
getchar();//消去回车符,要不然会出错,试了好久才试成功,哈哈
}
for(l=1;l<G->arcnum+1;l++)//初始化边,每个顶点都不相邻
for(j=1;j<G->arcnum+1;j++)
G->arcs[i][j].adj=MAX;
for(k=1;k<G->arcnum+1;k++)//给边赋值
{
printf("请输入第%d条边的两顶点及其权:\n",k);
printf("请输入第1个顶点:\n");
scanf("%c",&v1);
getchar();//消去回车符
printf("请输入第2个顶点:\n");
scanf("%c",&v2);
getchar();//消去回车符
printf("请输入这条边的权:\n");
scanf("%d",&w);
i=LocateVex(G,v1);
j=LocateVex(G,v2);
G->arcs[i][j].adj=w;//这个是无向图的赋值,如果是有向图则下面的G->arcs[j][i]=G->arcs[i][j]不用
G->arcs[j][i]=G->arcs[i][j];}
}
int FirstAdjVex(Graph *G, int v){
int i;
for(i=1;i<G->vexnum+1;i++)
if(G->arcs[v][i].adj!=MAX)
return i;
else
return -1;
}
int NextAdjVex(Graph *G,int v,int w){
int i;
for(i=w+1;i<G->vexnum+1;i++)
if(G->arcs[v][i].adj!=MAX)
return i;
else
return -1;
}
void DFS(Graph *G,int v){
int w;
visited[v]=1;
printf("%c",G->vexs[v]);;
for(w=FirstAdjVex(G,v);w!=-1;w=NextAdjVex(G,v,w))
if(!visited[w])
DFS(G,w);
}
void DFSTraverse(Graph *G){
int v;
for(v=1;v<G->vexnum+1;v++)
visited[v]=0;
for(v=1;v<G->vexnum+1;v++)
if(!visited[v])
DFS(G,v);
}
void main(){
Graph *G,b;
G=&b;
CreateGraph(G);
printf("%c",&G->vexs[1]);
DFSTraverse(G);
}