图的存储:邻接矩阵
代码
#include <iostream>
#include <stdlib.h>
#define MaxVertexNum 100
using namespace std;
typedef char VertexType;
typedef int EdgeType;
typedef struct{
VertexType Vex[MaxVertexNum];//顶点表
EdgeType Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵
int vexnum,arcnum;//图中的顶点数和弧数
}MGraph;
void CreateGraph(MGraph &graph){
//初始化
for(int i=0;i<graph.vexnum;i++){
for(int j=0;j<graph.vexnum;j++){
graph.Edge[i][j]=0;
}
}
int type=0;
printf("判断图的类型 1.无向图 2.有向图 :");
scanf("%d",&type);
fflush(stdin);
//输入顶点
cout<<"请输入顶点"<<endl;
for(int i=0;i<graph.vexnum;i++){
printf("请输入第%d个顶点:",i+1);
scanf("%c",&graph.Vex[i]);
fflush(stdin);
}
printf("请输入边数:");
scanf("%d",&graph.arcnum);
fflush(stdin);
char start,end;
for(int i=0;i<graph.arcnum;i++){
printf("请输入起点,终点:");
scanf("%c %c", &start, &end);
getchar(); //消除空白符
int startIndex, endIndex;
for (int j = 0; j < graph.vexnum; ++j){ //找到起始点,终点
if (start == graph.Vex[j]){ //遍历找到起点的下标
startIndex = j;
}
if (end == graph.Vex[j]){ //遍历找到终点的下标
endIndex = j;
}
}
graph.Edge[startIndex][endIndex]=1;
//如果是无向图,则双向保存
if(type==1){
graph.Edge[endIndex][startIndex]=1;
}
}
}
int main(){
int n;
printf("请输入顶点的数目:");
scanf("%d",&n);
if(n>MaxVertexNum)printf("顶点数超过最大值,输入错误!");
else{
MGraph graph;
graph.vexnum=n;
CreateGraph(graph);
for (int i = 0; i < graph.vexnum; ++i){
for (int j = 0; j < graph.vexnum; ++j){
printf("%d ", graph.Edge[i][j]);
}
printf("\n");
}
}
return 0;
}
我们输入上图的例子: