#define MAX_VERTEX_NUM 20//最多顶点数
#define INFINITY 32768 //表示无穷大
//图的种类
typedef enum{DG, DN, UDG, UDN} GraphKind;
typedef char VertexData;//顶点数据类型
typedef struct ArcNode{
unsigned int adj;//无权用 0 1,有权则为权值
}ArcNode;
typedef struct {
VertexData vertex[MAX_VERTEX_NUM];
ArcNode arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];//邻接矩阵
int vexnum, arcnum;//顶点数和弧数
GraphKind kind;//图的种类
} adjMatrix;
//求顶点的位置
int LocateVertex(adjMatrix *G, VertexData v){
int j = errno, k;
for (k = 0; k < G->vexnum; k++) {
if (G->vertex[k] == v) {
j = k;
break;
}
}
return j;
}
//创建一个有向网
int CreateDN(adjMatrix *G){
int i, j, k, weight;
VertexData v1, v2;
printf("请输入弧数,顶点数");
scanf("%d,%d", &G->arcnum, &G->vexnum);//输入弧数,顶点数
// 初始化邻接矩阵
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
G->arcs[i][j].adj = INFINITY;
}
}
// 输入图的顶点
for (i = 0; i < G->vexnum; i++) {
printf("请输入顶点%d\n",i);
scanf("%c",&G->vertex[i]);
while(getchar() != '\n');
}
for (k = 0; k < G->arcnum; k++) {
printf("请为弧%d输入顶点1,顶点2,权值\n",k);
scanf("%c,%c,%d",&v1, &v2, &weight);//输入弧的顶点,权值
while(getchar() != '\n');
i = LocateVertex(G, v1);
j = LocateVertex(G, v2);
G->arcs[i][j].adj = weight;//建立弧
}
return 1;
}
int main(int argc, const char * argv[]) {
// insert code here...
std::cout << "Hello, World!\n";
adjMatrix mat;
CreateDN(&mat);
printf("%d\n",mat.arcs[0][1].adj);
return 0;
}
图之邻接矩阵表示
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...