#include<stdio.h>
#include<stdlib.h>
#include<string>
#define MaxWeight 32767 //极大值
#define MaxVertices 100 //设最大顶点数为100个
typedef struct{ //包含权的邻接矩阵的的定义
int Vertices[MaxVertices]; //顶点信息的数组
int Edge[MaxVertices][MaxVertices]; //边的权信息的数组
int numV; //当前的顶点数
int numE; //当前的边数
}AdjMatrix;
//返回顶点在顶点表的位置
int weizhi(char v,AdjMatrix g){
int i=0;
for(i;i<g.numV;i++){
if(v==g.Vertices[i]){
return i;
}
}
return -1;
}
//生成图
void CreateGraph(AdjMatrix *G){
int i,j,w,p,q;
char vi,vj;
printf("请输入图的顶点数和边数(以空格分隔):");
scanf("%d %d",&G->numV,&G->numE);
getchar();
//初始化
for(i=0;i<G->numV;i++){
for(j=0;j<G->numE;j++){
G->Edge[i][j]=MaxWeight;
}
}
// 存入顶点
for(i=0;i<G->numV;i++){
printf("请输入第%d个顶点",i+1);
scanf("%c", &G->Vertices[i]);
getchar();
}
printf("\n");
//存入边
for(i=0;i<G->numE;i++){
printf("请输入边的起点和终点和权值(以空格分隔):");
scanf("%c %c %d",&vi,&vj,&w);
getchar();
p=weizhi(vi,*G);
q=weizhi(vj,*G);
G->Edge[p][q]=w;
//无向图则矩阵对称位置也要添加权值
//G->Edge[q][p]=w;
}
}
//打印图
void DispGraph(AdjMatrix G){
int i,j;
//输出顶点信息
printf("顶点信息为:\n");
for(i=0;i<G.numV;i++){
printf("%c ",G.Vertices[i]);
}
//输出邻接矩阵
printf("邻接矩阵为:\n");
for(i=0;i<G.numV;i++){
printf(" %c",G.Vertices[i]);
}
printf("\n");
for(i=0;i<G.numV;i++){
printf("%c ",G.Vertices[i]);
for(j=0;j<G.numV;j++){
if(G.Edge[i][j]==MaxWeight){
printf("∞ ");
}else{
printf("%d ",G.Edge[i][j]);
}
}
printf("\n");
}
}
int main(){
//创建图G
AdjMatrix G;
//生成图
CreateGraph(&G);
//打印图
DispGraph(G);
return 0;
}
06-06
04-24
9701
05-03
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交