#define MinInt 0
#define MVNum 100
#define OK 1
#define ERROR -1
#include<stdio.h>
// 图的存储结构
typedef char VerTexType;
typedef int ArcType;
typedef int Status;
typedef struct {
VerTexType vexs[MVNum];
ArcType arcs[MVNum][MVNum];// 邻接矩阵
int vexnum,arcnum;
} AMGraph;
// 确定当前点在点数组中的位置
Status LocateVex(AMGraph G,int v1) {
int index=-1;
for(int i=0; i<G.vexnum; i++) {
if(i==v1) {
index=i;
break;
}
}
return index;
}
// 邻接矩阵表示法创建无向图
Status CrateUDN(AMGraph &G) {
int v1,v2;
int num=0;
char c;
printf("请依次输入顶点数和边数:\n");
//输入顶点数和边数
scanf("%d%d",&G.vexnum,&G.arcnum);
// 遍历输入顶点信息,遇到#结束输入
printf("请输入字符数组,以#作为结束标志:\n");
while ((c = getchar()) != '#') {
G.vexs[num++] = c;
}
G.vexs[num] = '\0'; // 在字符数组末尾添加结束符
printf("添加成功");
// 验证结果
for(int i=0; i<num; i++) {
printf("%c",G.vexs[i]);
}
// 初始化邻接矩阵
for(int j=0; j<G.vexnum; j++) {
for(int i=0; i<G.vexnum; i++) {
G.arcs[j][i]=MinInt;
}
}
printf("\n初始化成功");
printf("\n请依次输入各条边的信息:(以,隔开)\n");
// 遍历输入顶点信息,并将其存入邻接矩阵中
for(int k=0; k<G.arcnum; k++) {
scanf("%d,%d",&v1,&v2);
int w=1;
// 获取顶点在vexs数组中的下标
int i=LocateVex(G,v1);
int j=LocateVex(G,v2);
// 修改邻接矩阵中的数据
G.arcs[i][j]=w;
G.arcs[j][i]=G.arcs[i][j];
}
return OK;
}
// 输出邻接矩阵
void traverseOut(AMGraph G) {
for(int i=0; i<G.vexnum; i++) {
for(int j=0; j<G.vexnum; j++) {
printf("%d ",G.arcs[i][j]);
}
printf("\n");
}
}
int main() {
AMGraph G;
CrateUDN(G);
printf("邻接矩阵为:\n");
traverseOut(G);
printf("%c",G.vexs[0]);
return 0;
}
数据结构-图
最新推荐文章于 2024-09-14 15:53:27 发布