深度优先遍历哪出错了,求教
代码写的有点乱啊,不要嫌弃啊,求助
#include <iostream>using namespace std;#define MAX_VERTEX_NUM 20 typedef struct{ int adj;}AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];struct MGraph{ char vertex[MAX_VERTEX_NUM]; // 顶点向量 AdjMatrix arcs; // 邻接矩阵 int vexnum, arcnum; // 图的当前顶点数和边数};struct Arr{ int elem[MAX_VERTEX_NUM];};int LocateVertex(MGraph G,char v);void CreateUDG(MGraph &G);void DepthFirstSearch(MGraph G);void BreadthFirstSearch(MGraph G);void Display(MGraph G);//用于返回输弧端点所表示的数值int LocateVertex(MGraph G,char v){ int j=0,i; for(i=0;i<G.vexnum;++i) if(G.vertex[i]==v) { j=i; break; } return j;}void CreateUDG(MGraph &G){ // 采用邻接矩阵表示法,构造无向图 int i,j,k;//i,j,k为计数器 char v1,v2; //用于放置输入的弧的两个顶点 cout<<"请输入无向图G的顶点数,边数: "<<endl; cin>>G.vexnum>>G.arcnum; cout<<"请输入"<<G.vexnum<<"个顶点的值,空格隔开:"<<endl; for(i=0;i<G.vexnum;++i) // 构造顶点向量 { cin>>G.vertex[i]; } cout<<"请输入"<<G.arcnum<<"条边的顶点 顶点: "<<endl; for(i=0;i<G.vexnum;++i) // 初始化邻接矩阵 for(j=0;j<G.vexnum;++j) { G.arcs[i][j].adj=0; } for(k=0;k<G.arcnum;++k) { cin>>v1>>v2; i=LocateVertex(G,v1); j=LocateVertex(G,v2); G.arcs[i][j].adj=G.arcs[j][i].adj=1; // 置<v1,v2>的对称弧<v2,v1> }}//无向图深度优先遍历void DepthFirstSearch(MGraph G) { int i,j, k=0,visited[MAX_VERTEX_NUM],t=1; //t标记输出顶点个数,visited[20]为标志符用于表示是否已经访问过 Arr p; for(i=0;i<G.vexnum;++i) visited[i]=0; visited[0]=1; //第一个字符开始遍历 cout<<"深度优先遍历:"<<endl; cout<<G.vertex[0]; i=0; while(i<G.vexnum) { for(j=0;j<G.vexnum;++j) { if(G.arcs[i][j].adj!=0 && visited[j]==0) { cout<<G.vertex[j]; visited[j]=1; p.elem[k]=i; i=j; k++; t++; } } //if(j==G.vexnum)//当在某一行无法找到合适值时,返回上一行重新开始循环 //{ k--; i=p.elem[k]; //} if(t==G.vexnum) break; //当全部的定点都打印出来了就退出循环 } cout<<endl;}void BreadthFirstSearch(MGraph G) {//无向图广度优先遍历 int visited[MAX_VERTEX_NUM],t=1; //t标记输出顶点个数,visited[20]为标志符用于表示是否已经访问过 for(int i=0;i<G.vexnum;++i) //初始化标志符 visited[i]=0; visited[0]=1; //规定以第一个字符开始遍历 cout<<"广度优先遍历:"<<endl; cout<<G.vertex[0]; for(int i=0;i<G.vexnum;++i) { for(int j=0;j<G.vexnum;++j) { if(G.arcs[i][j].adj!=0 && visited[j]==0) { cout<<G.vertex[j]; visited[j]=1; t++; } } //i++; if(t==G.vexnum) break; } cout<<endl;}//输出图的邻接矩阵void Display(MGraph G){ int i,j; cout<<"该图的邻接矩阵为:"<<endl; for(i=0;i<G.vexnum;++i) { for(j=0;j<G.vexnum;++j) cout<<G.arcs[i][j].adj<<" "; cout<<endl; }}int main(){ MGraph G; CreateUDG(G); Display(G); DepthFirstSearch(G); BreadthFirstSearch(G); system("pause"); return 0;}