实验四 图的操作的实现 代码及运行截图
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf("请输入边的条数:");
scanf("%d",&G.arcnum);
getchar();
printf("\n");
printf("请输入节点:\n");
for(i=0;i<G.vexnum;i++)
{ printf("vexs[%d]: ",i);
scanf("%c",&G.vexs[i]);
int visited[ MAX_VERTEX ];
}MGraph;/*图的节点数组,节点数,边数,邻接矩阵*/
int locatevex(MGraph &G,char v ) /*locatevex函数,返回v在图G中的位置*/
{ int i;
for(i=0;v!=G.vexs[i];i++);
return i;
scanf("%c",&v1);
getchar(); /*输入弧头弧尾*/
printf("请输入边尾:");
scanf("%c",&v2);
getchar();
i=locatevex(G,v1);
j=locatevex(G,v2);
G.arcs[i][j]=1;G.arcs[j][i]=1;}
}
int WXDisplay(MGraph *G)//无向图
} /*locatevex函数,返回v在图G中的位置*/
void createMGraph(MGraph &G) /*建造一个无向图*/
{ int i,j,k;
char v1,v2;
printf("请输入结点个数:");
scanf("%d",&G.vexnum);
getchar();
printf("\n");
G.visited[v]=1;
printf("%c",G.vexs[v]);
for(w=Firstadjvex(G,G.vexs[v]);w!=NULL;w=Nextadjvex(G,G.vexs[v],w))
if(!G.visited[locatevex(G,w)])
DFS(G,locatevex(G,w));
{int i,j;
i=locatevex(G,v);
j=locatevex(G,w);
for(j++;G.arcs[i][j]==0;j++)
if(j==G.vexnum) return NULL;
return G.vexs[j];
}
void DFS(MGraph &G,int v )
{ char w;
{
int i,j;
printf("邻接矩阵如下图:\n");
for(i=0;i<G->vexnum ;i++)
{
for(j=0;j<G->vexnum ;j++)
printf("%6d",G->arcs[i][j]);
printf("\n");
}
return 0;
} /*无向图建好*/
char Firstadjvex(MGraph G,char v) /*返回v的第一个邻接点函数,若无则返回null*/
DFS(G,v);
}
void main(){
MGraph G;
createMGraph(G);
WXDisplay(&G);
printf("\n");
printf("深度遍历为:");
DFSTraverse(G);
printf("\n");
}
{int i,j;i=locatevex(G,v);
for(j=0;G.arcs[i][j]==0;j++)
if(j==G.vexnum-1) return NULL ;
return G.vexs[j];}
char Nextadjvex(MGraph G,char v,char w) /*返回v相对于w的邻接点,若无则返回null*/
图的操作的实现代码及运行截图
#include <stdio.h>
#define MAX_VERTEX 20
#define INFINITY 32767
typedef struct{
char vexs[ MAX_VERTEX ];
int vexnum,arcnum;
int arcs[ MAX_VERTEX ][ MAX_VERTEX ];
getchar();
}/*vexs[]输入完成*/
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
G.arcs[i][j]=INFINITY; /*邻接矩阵初始化,值均为INFINITY*/
for(k=0;k<G.arcnum;k++){
printf("请输入边头:");
}
void DFSTraverse(MGraph &G) /*图的递归遍历*/
{int v;char w;
for(v=0;v<G.vexnum;v++)
G.visited[v]=0; /*访问标志数组初始化,0代表未被访问*/
for(v=0;v<G.vexnum;v++)Байду номын сангаас
if(!G.visited[v])
scanf("%d",&G.arcnum);
getchar();
printf("\n");
printf("请输入节点:\n");
for(i=0;i<G.vexnum;i++)
{ printf("vexs[%d]: ",i);
scanf("%c",&G.vexs[i]);
int visited[ MAX_VERTEX ];
}MGraph;/*图的节点数组,节点数,边数,邻接矩阵*/
int locatevex(MGraph &G,char v ) /*locatevex函数,返回v在图G中的位置*/
{ int i;
for(i=0;v!=G.vexs[i];i++);
return i;
scanf("%c",&v1);
getchar(); /*输入弧头弧尾*/
printf("请输入边尾:");
scanf("%c",&v2);
getchar();
i=locatevex(G,v1);
j=locatevex(G,v2);
G.arcs[i][j]=1;G.arcs[j][i]=1;}
}
int WXDisplay(MGraph *G)//无向图
} /*locatevex函数,返回v在图G中的位置*/
void createMGraph(MGraph &G) /*建造一个无向图*/
{ int i,j,k;
char v1,v2;
printf("请输入结点个数:");
scanf("%d",&G.vexnum);
getchar();
printf("\n");
G.visited[v]=1;
printf("%c",G.vexs[v]);
for(w=Firstadjvex(G,G.vexs[v]);w!=NULL;w=Nextadjvex(G,G.vexs[v],w))
if(!G.visited[locatevex(G,w)])
DFS(G,locatevex(G,w));
{int i,j;
i=locatevex(G,v);
j=locatevex(G,w);
for(j++;G.arcs[i][j]==0;j++)
if(j==G.vexnum) return NULL;
return G.vexs[j];
}
void DFS(MGraph &G,int v )
{ char w;
{
int i,j;
printf("邻接矩阵如下图:\n");
for(i=0;i<G->vexnum ;i++)
{
for(j=0;j<G->vexnum ;j++)
printf("%6d",G->arcs[i][j]);
printf("\n");
}
return 0;
} /*无向图建好*/
char Firstadjvex(MGraph G,char v) /*返回v的第一个邻接点函数,若无则返回null*/
DFS(G,v);
}
void main(){
MGraph G;
createMGraph(G);
WXDisplay(&G);
printf("\n");
printf("深度遍历为:");
DFSTraverse(G);
printf("\n");
}
{int i,j;i=locatevex(G,v);
for(j=0;G.arcs[i][j]==0;j++)
if(j==G.vexnum-1) return NULL ;
return G.vexs[j];}
char Nextadjvex(MGraph G,char v,char w) /*返回v相对于w的邻接点,若无则返回null*/
图的操作的实现代码及运行截图
#include <stdio.h>
#define MAX_VERTEX 20
#define INFINITY 32767
typedef struct{
char vexs[ MAX_VERTEX ];
int vexnum,arcnum;
int arcs[ MAX_VERTEX ][ MAX_VERTEX ];
getchar();
}/*vexs[]输入完成*/
for(i=0;i<G.vexnum;i++)
for(j=0;j<G.vexnum;j++)
G.arcs[i][j]=INFINITY; /*邻接矩阵初始化,值均为INFINITY*/
for(k=0;k<G.arcnum;k++){
printf("请输入边头:");
}
void DFSTraverse(MGraph &G) /*图的递归遍历*/
{int v;char w;
for(v=0;v<G.vexnum;v++)
G.visited[v]=0; /*访问标志数组初始化,0代表未被访问*/
for(v=0;v<G.vexnum;v++)Байду номын сангаас
if(!G.visited[v])