#include <stdio.h>
#define Maxvertexnum 100
typedef char VertexData;
typedef int AdjType;
typedef int OtherInfo;//权值
typedef struct ArcNode{//边信息
AdjType adj;//边的信息1代表有边,0代表没边
OtherInfo info;
}ArcNode;
typedef struct {//邻接矩阵
VertexData vertex[Maxvertexnum];//顶点数组
ArcNode arcs[Maxvertexnum][Maxvertexnum];//定义邻接矩阵
int vexnum,arcnum;//定义结点和边的数目
}AdjMatrix;
int LocateVertex(AdjMatrix *G,VertexData v){//求顶点的在顶点数组的下标
int j=-1,k,i;
for(k=0;k<G->vexnum;k++){
if(G->vertex[k]==v){
j=k;
break;
}
}
return j;
}
void GreateMatrix(AdjMatrix *G){//使用邻接矩阵创建无向图
char v1,v2;
int i,j,k;
printf("使用邻接矩阵创建图,请输入图的顶点个数和弧数!\n");
scanf("%d %d",&G->vexnum,&G->arcnum);
for (i = 0; i <G->vexnum ; ++i) {//初始化
for (j = 0; j <G->vexnum ; ++j) {
G->arcs[i][j].adj=0;
}
}
printf("请输入图的各个顶点\n");
for (int l = 0; l < G->vexnum; ++l) {
fflush(stdin);
scanf("%c",&G->vertex[l]);
}
printf("输入两个相连的顶点名称!\n");
for (k = 0; k < G->arcnum; ++k) {
fflush(stdin);
scanf("%c-%c",&v1,&v2);
i=LocateVertex(G,v1);
j=LocateVertex(G,v2);
G->arcs[i][j].adj=1;//无向图
G->arcs[j][i].adj=1;
}
printf("打印出用邻接矩阵创建的无向图!\n");
for (i = 0; i < G->vexnum ;++i) {
for (j = 0; j < G->vexnum; ++j) {
printf("%d ",G->arcs[i][j].adj);
}
printf("\n");
}
}
int main() {
printf("使用邻接矩阵创建无向图!\n");
AdjMatrix G;
GreateMatrix(&G);
return 0;
}
图的创建——邻接矩阵法
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 图由有穷、非空点集和边集合组成,简写成G(V,E0) 图的创建有多种方法(邻接矩阵、邻接表、十字链表) 图的遍历方...
- 采用邻接矩阵表示法创建无向网 采用邻接表表示法创建无向图 深度优先搜索遍历连通图的递归算法 深度优先搜索遍历非连通...
- 1 图的定义 一个图(G)定义为一个偶对(V,E),记为G=(V,E)。V是顶点(Vertex)的非空有限集合,记...