补个档,第十一周学的是图
这个是创建赋权无向图的邻接矩阵
1 //算法8-1:输入n个顶点和e条边的信息,创建赋权无向图G的邻接矩阵 2 void CreateUDN(AdjMatrix *G) 3 { 4 int i, j, k; 5 AdjType weight; 6 VertexData v1, v2; 7 8 printf("请输入图的顶点数目:"); 9 scanf("%d", &G->vexnum ); 10 11 printf("请输入弧的数目:"); 12 scanf("%d", &G->arcnum ); 13 14 /*初始化邻接矩阵*/ 15 for(i=0; i<G->vexnum; i++) 16 for(j=0; j<G->vexnum; j++) 17 G->arcs[i][j].adj=INFINITY; 18 19 printf("请输入顶点信息(直接连续输入,不要使用空格或回车间隔,除非空格或回车是顶点存储的元素):"); 20 fflush(stdin); /*消除前面回车的影响*/ 21 for(i=0; i<G->vexnum; i++) 22 scanf("%c", &G->vertex[i]); 23 24 printf("构建邻接矩阵,请输入一条弧的起点、终点与权值,例如"a,b,10" "); 25 for(k=0; k<G->arcnum; k++) 26 { 27 printf("第%d-%d条:", G->arcnum, k+1); 28 fflush(stdin); 29 scanf("%c,%c,%d", &v1, &v2, &weight); 30 i=LocateVex(G, v1); 31 j=LocateVex(G, v2); 32 G->arcs[i][j].adj=weight; 33 G->arcs[j][i].adj=weight;//比有向图只是加了这一句 34 } 35 }
这个是创建赋权有向图的邻接矩阵
1 //算法8-2:输入n个顶点和e条边的信息,创建赋权有向图G的邻接矩阵 2 void CreateDN(AdjMatrix *G) 3 { 4 int i, j, k; 5 AdjType weight; 6 VertexData v1, v2; 7 8 printf("请输入图的顶点数目:"); 9 scanf("%d", &G->vexnum ); 10 11 printf("请输入弧的数目:"); 12 scanf("%d", &G->arcnum ); 13 14 /*初始化邻接矩阵*/ 15 for(i=0; i<G->vexnum; i++) 16 for(j=0; j<G->vexnum; j++) 17 G->arcs[i][j].adj=INFINITY; 18 19 printf("请输入顶点信息(直接连续输入,不要使用空格或回车间隔,除非空格或回车是顶点存储的元素):"); 20 fflush(stdin); /*消除前面回车的影响*/ 21 for(i=0; i<G->vexnum; i++) 22 scanf("%c", &G->vertex[i]); 23 24 printf("构建邻接矩阵,请输入一条弧的起点、终点与权值,例如"a,b,10" "); 25 for(k=0; k<G->arcnum; k++) 26 { 27 printf("第%d-%d条:", G->arcnum, k+1); 28 fflush(stdin); 29 scanf("%c,%c,%d", &v1, &v2, &weight); 30 i=LocateVex(G, v1); 31 j=LocateVex(G, v2); 32 G->arcs[i][j].adj=weight; 33 } 34 }
这个是删除赋权有向图的边
1 //算法8-3:删除赋权有向图G的一条边 2 void shanchu(AdjMatrix *G) 3 { 4 int i,j; 5 VertexData v1, v2; 6 printf("请输入要删除的边的起点与终点,例如a,b "); 7 fflush(stdin); 8 scanf("%c,%c", &v1, &v2); 9 i=LocateVex(G, v1); 10 j=LocateVex(G, v2); 11 G->arcs[i][j].adj=INFINITY;//权值改成无限大 12 }