数据结构 图的遍历
答案:2 悬赏:20 手机版
解决时间 2021-12-02 13:01
- 提问者网友:容嬷嬷拿针来
- 2021-12-01 15:19
数据结构 图的遍历
最佳答案
- 五星知识达人网友:神的生死簿
- 2021-12-01 16:38
图的遍历:#include
#define INFINITY 0
#define MAX_VERTEX_NUM 20
typedef int VRType,InfoType;
typedef char VertexType;
typedef struct ArcCell{
VRType adj;//VrType是顶点关系类型,对无权图,用1或0表示相邻否,对有权图为权值类型
InfoType *info;
}ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct{
VertexType vexs[MAX_VERTEX_NUM];
AdjMatrix arcs;
int vexnum,arcnum;//图的当前顶点数和弧数
}MGraph;
int LocateVex(MGraph G,VertexType v){
int i;
for(i=0;i if(G.vexs[i]==v)
{
return i;
break;
}
i++;
}
if(i>=G.vexnum) return -1;
}
int CreateUDN(MGraph &G){//创建无向网
int IncInfo,i,k,j,w;
VertexType v1,v2;
printf("开始构造一个无向网\n");
printf("请输入图的顶点数 边数 弧是否包含其他信息\n");
scanf("%d%d%d",&G.vexnum,&G.arcnum,&IncInfo);
printf("输入各顶点元素");
for(i=0;i for(i=0;i for(j=0;j G.arcs[i][j].adj=INFINITY;
G.arcs[i][j].info=NULL;
}
for(k=0;k printf("输入一条边依附的顶点及权:");
scanf("\n%c%c%d",&v1,&v2,&w);
i=LocateVex(G,v1);//确定v1和v2在G中的位置
j=LocateVex(G,v2);
G.arcs[i][j].adj=w;
if(IncInfo) {
printf("输入弧包含的信息:");
scanf("%d",&G.arcs[i][j].info);
}
G.arcs[j][i]=G.arcs[i][j];
}
return 1;
}
void DispGraph(MGraph G){//输出图的邻接矩阵表示
int i,j;
for(i=0;i {
for(j=0;j printf("%d\t",G.arcs[i][j].adj);
}
printf("\n");
}
}
void DFS(MGraph G,int first,int mark[])
{
int v1;
mark[first]=1;
printf("%c ",G.vexs[first]);
for(v1=0;v1 {
if(G.arcs[first][v1].adj!=0&&mark[v1]==0)
DFS(G,v1,mark);
}
}
void GraphDFS(MGraph G)
{
int first=0,v,v1,mark[MAX_VERTEX_NUM];
printf("\n深度遍历:");
for(v=0;v {
mark[v]=0;
}
for(v=first;v {
v1=v%G.vexnum;
if(mark[v1]==0)
DFS(G,v1,mark);
}
}
#define INFINITY 0
#define MAX_VERTEX_NUM 20
typedef int VRType,InfoType;
typedef char VertexType;
typedef struct ArcCell{
VRType adj;//VrType是顶点关系类型,对无权图,用1或0表示相邻否,对有权图为权值类型
InfoType *info;
}ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct{
VertexType vexs[MAX_VERTEX_NUM];
AdjMatrix arcs;
int vexnum,arcnum;//图的当前顶点数和弧数
}MGraph;
int LocateVex(MGraph G,VertexType v){
int i;
for(i=0;i
{
return i;
break;
}
i++;
}
if(i>=G.vexnum) return -1;
}
int CreateUDN(MGraph &G){//创建无向网
int IncInfo,i,k,j,w;
VertexType v1,v2;
printf("开始构造一个无向网\n");
printf("请输入图的顶点数 边数 弧是否包含其他信息\n");
scanf("%d%d%d",&G.vexnum,&G.arcnum,&IncInfo);
printf("输入各顶点元素");
for(i=0;i
G.arcs[i][j].info=NULL;
}
for(k=0;k
scanf("\n%c%c%d",&v1,&v2,&w);
i=LocateVex(G,v1);//确定v1和v2在G中的位置
j=LocateVex(G,v2);
G.arcs[i][j].adj=w;
if(IncInfo) {
printf("输入弧包含的信息:");
scanf("%d",&G.arcs[i][j].info);
}
G.arcs[j][i]=G.arcs[i][j];
}
return 1;
}
void DispGraph(MGraph G){//输出图的邻接矩阵表示
int i,j;
for(i=0;i
for(j=0;j
}
printf("\n");
}
}
void DFS(MGraph G,int first,int mark[])
{
int v1;
mark[first]=1;
printf("%c ",G.vexs[first]);
for(v1=0;v1
if(G.arcs[first][v1].adj!=0&&mark[v1]==0)
DFS(G,v1,mark);
}
}
void GraphDFS(MGraph G)
{
int first=0,v,v1,mark[MAX_VERTEX_NUM];
printf("\n深度遍历:");
for(v=0;v
mark[v]=0;
}
for(v=first;v
v1=v%G.vexnum;
if(mark[v1]==0)
DFS(G,v1,mark);
}
}
全部回答
- 1楼网友:西岸风
- 2021-12-01 17:59
这个根据图的广度和深度算法就可以写出来。详细答案就是程序了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯