图的邻接矩阵和邻接表相互转换Word格式文档下载.docx
- 文档编号:13780060
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:7
- 大小:22.21KB
图的邻接矩阵和邻接表相互转换Word格式文档下载.docx
《图的邻接矩阵和邻接表相互转换Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《图的邻接矩阵和邻接表相互转换Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
typedefstructArcNode{
intadjvex;
//弧的邻接定点
charinfo;
//邻接点值
structArcNode*nextarc;
//指向下一条弧的指针
}ArcNode;
typedefstructVnode{//节点信息
chardata;
ArcNode*link;
}Vnode,AdjList[MAX];
typedefstruct{
AdjListvertices;
intvexnum;
//节点数
intarcnum;
//边数
}ALGraph;
//图的邻接矩阵存储表示
typedefstruct{
intn;
//顶点个数
charvexs[MAX];
//定点信息
intarcs[MAX][MAX];
//边信息矩阵
}AdjMatrix;
/***_____________________________________________________***/
//函数名:
AdjListToMatrix(AdjListg1,AdjListMatrix&
gm,intn)
//参数:
(传入)AdjListg1图的邻接表,(传入)intn顶点个数,(传出)AdjMatrixgm图的邻接矩阵
//功能:
把图的邻接表表示转换成图的邻接矩阵表示
voidAdjListToAdjMatrix(ALGraphgl,AdjMatrix&
gm){
inti,j,k;
ArcNode*p;
gm.n=gl.vexnum;
for(k=0;
k<
gl.vexnum;
k++)
gm.vexs[k]=gl.vertices[k].data;
for(i=0;
i<
MAX;
i++)
for(j=0;
j<
j++)
gm.arcs[i][j]=0;
i++){
p=gl.vertices[i].link;
//取第一个邻接顶点
while(p!
=NULL){//取下一个邻接顶点
gm.arcs[i][p->
adjvex]=1;
p=p->
nextarc;
}
}
}
/***________________________________________________***/
AdjMatrixToAdjList
voidAdjMatrixToAdjList(AdjMatrixgm,ALGraph&
gl){
inti,j,k,choice;
k=0;
gl.vexnum=gm.n;
cout<
<
"
请选择所建立的图形是无向图或是有向图:
;
cin>
>
choice;
gm.n;
gl.vertices[i].data=gm.vexs[i];
gl.vertices[i].link=NULL;
}
if(gm.arcs[i][j]==1){
k++;
p=newArcNode;
p->
adjvex=j;
p->
info=gm.vexs[j];
nextarc=gl.vertices[i].link;
gl.vertices[i].link=p;
if(choice==1)
k=k/2;
gl.arcnum=k;
voidCreateAdjList(ALGraph&
G){
inti,s,d,choice;
请选择所建立的图形是有向图或是无向图:
请输入节点数和边数:
endl;
G.vexnum>
G.arcnum;
G.vexnum;
cout<
第"
个节点的信息:
cin>
G.vertices[i].data;
G.vertices[i].link=NULL;
if(choice==1){
for(i=0;
2*(G.vexnum);
边----起点序号,终点序号:
s>
d;
p=newArcNode;
p->
adjvex=d;
info=G.vertices[d].data;
nextarc=G.vertices[s].link;
G.vertices[s].link=p;
else{
voidCreateAdjMatrix(AdjMatrix&
M){
请输入顶点个数:
M.n;
请输入如顶点信息:
M.vexs[k];
请输入边信息:
M.arcs[i][j]=0;
switch(choice){
case1:
{for(k=0;
k++){
i>
j;
M.arcs[i][j]=M.arcs[j][i]=1;
};
break;
case2:
M.arcs[i][j]=1;
voidOutPutAdjList(ALGraph&
inti;
ArcNode*p;
图的邻接表如下:
p=G.vertices[i].link;
while(p!
=NULL){
cout<
---->
("
adjvex<
"
info<
)"
p=p->
voidOutPutAdjMatrix(AdjMatrixgm){
图的邻接矩阵如下:
for(inti=0;
for(intj=0;
gm.arcs[i][j];
voidmain(){
ALGraphgl1,gl2;
AdjMatrixgm1,gm2;
CreateAdjList(gl1);
AdjListToAdjMatrix(gl1,gm1);
OutPutAdjList(gl1);
OutPutAdjMatrix(gm1);
CreateAdjMatrix(gm2);
AdjMatrixToAdjList(gm2,gl2);
OutPutAdjList(gl2);
OutPutAdjMatrix(gm2);
WelcomeTo
Download!
!
欢迎您的下载,资料仅供参考!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 邻接矩阵 邻接 相互 转换