注册 登录
编程论坛 数据结构与算法

DN DG UDG 怎么做

yf879326915 发布于 2017-05-05 21:47, 2864 次点击
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define INFINITY INT_MAX
#define MAX_VERTEX_NUM 20
typedef int Status;
typedef int VRType;
typedef int InfoType;
typedef enum {DG,DN,UDG,UDN} GraphKind;
typedef struct ArcCell {
    VRType adj;
    InfoType *info;
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef char VertexType;
typedef struct {
    VertexType vexs[MAX_VERTEX_NUM];
    AdjMatrix arcs;
    int vexnum,arcnum;
    GraphKind kind;
}MGraph;

int LocateVex(MGraph G,char v){
    int i;
    for(i=0;i<G.vexnum;++i)
        if(G.vexs[i]==v) return i;
        return -1;
}

Status CreateUDN(MGraph &G){
    int i,j,k,w;
    VertexType v1,v2;
    printf("输入顶点数G.vexnum:"); scanf("%d",&G.vexnum);
    printf("输入边数G.arcnum:"); scanf("%d",&G.arcnum);
    getchar();
    for(i=0;i<G.vexnum;i++){
        printf("输入顶点G.vex[%d]:",i);
        scanf("%c",&G.vexs[i]);
        getchar();
    }
    for(i=0;i<G.vexnum;++i)
        for(j=0;j<G.vexnum;++j){
            G.arcs[i][j].adj=INFINITY;
            G.arcs[i][j].info=NULL;
        }
        for(k=0;k<G.arcnum;++k){
            printf("输入第%d条边vi,vj和权值w(int):\n",k+1);
            scanf("%c %c %d",&v1,&v2,&w);
            getchar();
            i=LocateVex(G,v1); j=LocateVex(G,v2);
            G.arcs[i][j].adj=w;
            G.arcs[j][i].adj=G.arcs[i][j].adj;
        }
        return OK;
}

Status CreateGraph(MGraph &G){
    printf("请输入图的种类: 0表示DG,1表示Dn,2表示UDG,3表示UDN\n");
    scanf("%d",&G.kind);
    switch(G.kind){
      //  case  DG:return CreateDG(G);
     //   case  DN:return CreateDN(G);
      //  case UDG:return CreateUDG(G);
        case UDN:return CreateUDN(G);
        default:return ERROR;
    }
}

void list(MGraph G){
    int i,j;
    printf("输入邻接矩阵:\n");
    for(i=0;i<G.vexnum;++i){
        printf("%c----",G.vexs[i]);
        for(j=0;j<G.vexnum;++j)
            if(G.arcs[i][j].adj==INFINITY)
                printf("%4d","∞");
            else
                printf("%4d",G.arcs[i][j].adj);
            printf("\n");
    }
}

void main() {
    MGraph G;
    CreateGraph(G);
    list(G);
}

0 回复
1