图之邻接矩阵表示

2016-11-22  本文已影响28人  Gxpzy
#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;
}
上一篇 下一篇

猜你喜欢

热点阅读