图的基本操作算法_B5解读.docVIP

  • 21
  • 0
  • 约2.81万字
  • 约 40页
  • 2017-04-16 发布于湖北
  • 举报
//图的基本操作算法 //1. void CreatGraph (AdjList g) //建立有n个顶点和m 条边的无向图的邻接表存储结构 { int n,m; scanf(%d%d,n,m); for(i =1,i=n;i++) //输入顶点信息,建立顶点向量 { scanf(g[i].vertex); g[i].firstarc=null; } for(k=1;k=m;k++) //输入边信息 { scanf(v1,v2); //输入两个顶点 i=GraphLocateVertex (g,v1); j=GraphLocateVertex (g,v2); //顶点定位 p=(ArcNode *)malloc(sizeof(ArcNode)); //申请边结点 p-adjvex=j; p-next=g[i].firstarc; g[i].firstarc=p; //将边结点链入 p=(ArcNode *)malloc(sizeof(ArcNode)); //无向图双向连接 p-adjvex=i; p-next=g[j].firstarc; g[j].firstarc=p; } }//算法CreatGraph结束 //2. void CreatAdjList(AdjList g) //建立有向图的邻接表存储结构 { int n; scanf(%d,n); for (i=1;i=n;j++) { scanf(g[i].vertex); g[i].firstarc=null; }//输入顶点信息 scanf(v1, v2); while(v1 v2) //题目要求两顶点之一为0表示结束 { i=GraphLocateVertex(g2,v1); p=(ArcNode*)malloc(sizeof(ArcNode)); //有向图 只需要单边 p-adjvex=j; p-next=g[i].firstarc; g[i].firstarc=p; scanf(v1,v2); } } //5. void InvertAdjList(AdjList gin,gout) //将有向图的出度邻接表改为按入度建立的逆邻接表 { for(i=1;i=n;i++) //设有向图有n个顶点,建逆邻接表的顶点向量。 { gin[i].vertex=gout[i].vertex; gin.firstarc=null; }//逆邻接表 顶点初始化 for(i=1;i=n;i++) //邻接表转为逆邻接表 { p=gout[i].firstarc; //取指向邻接表的指针 邻接表 头结点i的第一条边 while(p!=null) { j=p-adjvex; // 邻接表i,j边结点中的j顶点信息 s=(ArcNode *)malloc(sizeof(ArcNode)); //申请逆邻接表的边结点空间 s-adjvex=i; //对逆邻接表的j,i边结点 顶点信息赋值 s-next=gin[j].firstarc; //对逆邻接表的j,i边结点 下一边信息赋值 gin[j].firstarc=s; // j,i边结点链入逆邻接表 p=p-next; // 邻接表中找下一个邻接点。 }//while }//for } //6. void AdjListToAdjMatrix(AdjList gl, AdjMatrix gm) //将图的邻接表表示转换为邻接矩阵表示 { for(i=1;i=n;i++) //设图有n个顶点,邻接矩阵初始化。 for(j=1;j=n;j++) gm[i][j]=0; for(i=1;i=n;i++) { p=gl[i].firstarc; //取第一个邻接点。 while(p!=null) { gm[i][p-adjvex]=1; p=p-next; } //下一个邻接点 }//for }//算法结束 //7. void AdjMatrixToAdjList( AdjMatrix gm, AdjList gl ) //图的邻接矩阵表示法转换为邻接表表示法 { for(i=1;i=n;i++) //邻接表表头向量初始化。 { scanf(gl[i].vertex); gl[i].firstarc=null; } for(i=1;i=n;i++) for(j=1;j=n;j+

文档评论(0)

1亿VIP精品文档

相关文档