邻接矩阵存储结构:
创建无向图、有向图:
#include<stdio.h>
#include<stdlib.h>
#define MaxVexNum 100
#define MaxInt 32767
//邻接矩阵
typedef int VertexType;
typedef int EdgeType;
typedef struct AMGraph{
VertexType vexs[MaxVexNum];//顶点表
EdgeType arcs[MaxVexNum][MaxVexNum];//邻接矩阵表
int vexnum,edgenum;//顶点数,边数
}AMGraph;
void createGraph(AMGraph &g){//创建无向图
printf("请输入顶点数:");
scanf("%d",&g.vexnum);
printf("\n请输入边数:");
scanf("%d",&g.edgenum);
//初始化顶点表
for(int i=0;i<g.vexnum;i++){
g.vexs[i]=i;
}
for(int i=0;i<g.vexnum;i++){
for(int j=0;j<g.vexnum;j++){
g.arcs[i][j]=MaxInt;
if(i==j) g.arcs[i][j]=0;
}
}
printf("请输入边的信息以及边的权值(顶点是0~n-1)\n");
for(int i=0;i<g.edgenum;i++){
int x,y,w;
scanf("%d%d%d",&x,&y,&w);
g.arcs[x][y]=w;//有向图
// g.arcs[x][y]=w;//无向图:在矩阵中对称的元素都要赋值
// g.arcs[y][x]=w;
}
}
void PrintGraph(AMGraph g){
printf("邻接矩阵为:\n");
for(int i=0;i<g.vexnum;i++) {
printf(" %d",g.vexs[i]);
}
printf("\n");
for(int i=0;i<g.vexnum;i++){
printf("%d ",g.vexs[i]);
for(int j=0;j<g.vexnum;j++){
if(g.arcs[i][j]==32767){
printf("∞ ");
}else{
printf("%d ",g.arcs[i][j]);
}
}
printf("\n");
}
}
int main(){
AMGraph g;
createGraph(g);
PrintGraph(g);
}
代码运行截图: