数据结构C++无向图的邻接矩阵深度优先遍历,求解答
#include<iostream>#include<malloc.h>usingnamespacestd;#defineINFINITYINT_MAX#defineMA...
#include <iostream>#include <malloc.h>using namespace std;#define INFINITY INT_MAX#define MAX_VERTEX_NUM 20#define OK -1#define FALSE 0#define TRUE 1typedef int Status;typedef int Boolean ;typedef int VertexType;typedef enum {UDG} GraphKind;
typedef struct{ VertexType vexs[MAX_VERTEX_NUM]; int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; int vexnum,arcnum;
}MGraph;int LocateVex (MGraph G,VertexType v){ int i; for(i = 0;i<G.vexnum;i++) if(G.vexs[i] == i){ return i; } return -1;}void CreateUDG(MGraph&G){ int i,j,k,v1,v2; printf("请输入顶点的数:"); cin>>G.vexnum; printf("请输入边的数目:"); cin>>G.arcnum; printf("请输入顶点的值:"); for(i = 0;i<G.vexnum;i++) cin>>G.vexs[i]; for(i = 0;i<G.vexnum;i++) for(j = 0;j<G.vexnum;j++) G.arcs[i][j] = 0; printf("请输入边依附的顶点编号:"); for(k = 0;k<G.arcnum;k++){ cin>>v1>>v2; i = LocateVex(G,v1); j = LocateVex(G,v2); G.arcs[i][j]==1; G.arcs[i][j] = G.arcs[j][i] ; }}bool visited[MAX_VERTEX_NUM];
int FirstAdjVex(MGraph G,int v){ int j; for(j = 0;j<G.vexnum;j++) { if(G.arcs[v][j] == 1) return j;} return -1;}int NextAdjVex(MGraph G,int v,int w){ int j; for(j = w+1;j<G.vexnum;j++){ if(G.arcs[v][j] == 1) return j;} return -1;}
void DFS(MGraph G,int v){ int w; visited[v] = TRUE; cout<<G.vexs[v]<<endl;
for(w = FirstAdjVex(G,v);w>=0;w = NextAdjVex(G,v,w)) if(!visited[w]) DFS(G,w);}
void DFSTraverse(MGraph G,int v){ for(v = 0;v<G.vexnum;++v) visited[v] = FALSE; for(v = 0;v<G.vexnum;++v) if(!visited[v]) DFS(G,v);}
int main(){ int v = 0; MGraph G; CreateUDG(G);
DFSTraverse(G,v); system("PAUSE"); return 0;}
运行的结果
不管输入顶点的值是什么,深度遍历的结果都是输入顶点的值的顺序。。
数据结构的新手,求大神指导 展开
typedef struct{ VertexType vexs[MAX_VERTEX_NUM]; int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; int vexnum,arcnum;
}MGraph;int LocateVex (MGraph G,VertexType v){ int i; for(i = 0;i<G.vexnum;i++) if(G.vexs[i] == i){ return i; } return -1;}void CreateUDG(MGraph&G){ int i,j,k,v1,v2; printf("请输入顶点的数:"); cin>>G.vexnum; printf("请输入边的数目:"); cin>>G.arcnum; printf("请输入顶点的值:"); for(i = 0;i<G.vexnum;i++) cin>>G.vexs[i]; for(i = 0;i<G.vexnum;i++) for(j = 0;j<G.vexnum;j++) G.arcs[i][j] = 0; printf("请输入边依附的顶点编号:"); for(k = 0;k<G.arcnum;k++){ cin>>v1>>v2; i = LocateVex(G,v1); j = LocateVex(G,v2); G.arcs[i][j]==1; G.arcs[i][j] = G.arcs[j][i] ; }}bool visited[MAX_VERTEX_NUM];
int FirstAdjVex(MGraph G,int v){ int j; for(j = 0;j<G.vexnum;j++) { if(G.arcs[v][j] == 1) return j;} return -1;}int NextAdjVex(MGraph G,int v,int w){ int j; for(j = w+1;j<G.vexnum;j++){ if(G.arcs[v][j] == 1) return j;} return -1;}
void DFS(MGraph G,int v){ int w; visited[v] = TRUE; cout<<G.vexs[v]<<endl;
for(w = FirstAdjVex(G,v);w>=0;w = NextAdjVex(G,v,w)) if(!visited[w]) DFS(G,w);}
void DFSTraverse(MGraph G,int v){ for(v = 0;v<G.vexnum;++v) visited[v] = FALSE; for(v = 0;v<G.vexnum;++v) if(!visited[v]) DFS(G,v);}
int main(){ int v = 0; MGraph G; CreateUDG(G);
DFSTraverse(G,v); system("PAUSE"); return 0;}
运行的结果
不管输入顶点的值是什么,深度遍历的结果都是输入顶点的值的顺序。。
数据结构的新手,求大神指导 展开
展开全部
你能不能给贴上一个深度遍历错误的用例?你这个输入用例的结果就是1,2,3,4
现在能看出来的就是这个了,
int LocateVex (MGraph G,VertexType v){
int i;
for(i = 0;i<G.vexnum;i++)
if(G.vexs[i] == v){ //这里应该是等于v,而不是等于i
return i;
}
return -1;
}
现在能看出来的就是这个了,
int LocateVex (MGraph G,VertexType v){
int i;
for(i = 0;i<G.vexnum;i++)
if(G.vexs[i] == v){ //这里应该是等于v,而不是等于i
return i;
}
return -1;
}
更多追问追答
追答
我都说过啦。。你这个测试用例的输入返回的结果就是1234啊,你找一个输入用例不是1234的,最好节点多一点儿的测试用例。然后把结果贴一下我看看。
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询