首页 > 其他分享 >图(C)

图(C)

时间:2022-11-11 22:48:17浏览次数:35  
标签: MyGraph return int break ++ relation

图的顺序存储结构

邻接矩阵

四种图分别实现   下面只给出了有向图的实现,其他三种仅修改最后存储结果即可(网需要读入权重)

#include<stdio.h>
#define NumOfVertex 200
#define VertexType int

typedef enum{Digraph,Undigraph,DirectedNet,UndirectedNet}GraphKind;

typedef struct{
    int relation;   //无权图用01表示是否相连接   网直接表示权重 
    //Info;
}rlt,rltionMatrix[NumOfVertex][NumOfVertex];

typedef struct{
    VertexType Vex[NumOfVertex];  //存顶点 
    int NumOfVex,NumOfArc;            //存顶点和边的数量 
    rltionMatrix Matrix;             // 矩阵 
    GraphKind kind;                //图的类型 
}MyGraph;

//定位顶点在表中位置 
int LocateVex(MyGraph*g,VertexType v){
    for(int i = 0;i<g->NumOfVex;i++){
        if(g->Vex[i]==v)
        return i;
    }
    
    printf("None");
    return -1;
}

//创建有向图 
void CreatDG(MyGraph *g){
    int VNum,ANum;
    scanf("%d %d",&(g->NumOfVex),&(g->NumOfArc));
    
    //存顶点数据
    for(int i =0;i<g->NumOfVex;i++)
    scanf("%d",&(g->Vex[i]));
    
    //printf("RUN HERE");
    //初始化矩阵全置为0
    for(int i =0;i<g->NumOfVex;i++)
        for(int j = 0;j<g->NumOfVex;j++)
            {
                g->Matrix[i][j].relation=0;
                //info
             } 
             

    //构造矩阵
    for(int i = 0;i<g->NumOfArc;i++)
    {
        int v1,v2;
        scanf("%d %d", &v1, &v2);
        int pos1 = LocateVex(g,v1);
        int pos2 = LocateVex(g,v2);
        
        if(pos1==-1||pos2==-1)
        return;
        else
        g->Matrix[pos1][pos2].relation=1;
        ////无向图的二阶矩阵沿主对角线对称
        //网读入权存入矩阵 
                 }             
     
}

//void CreateGraph(MyGraph* G) {
//    //选择图的类型
//    scanf("%d", &(G->kind));
//    //根据所选类型,调用不同的函数实现构造图的功能
//    switch (G->kind) {
//    case DG:
//        return CreateDG(G);
//        break;
//    case DN:
//        return CreateDN(G);
//        break;
//    case UDG:
//        return CreateUDG(G);
//        break;
//    case UDN:
//        return CreateUDN(G);
//        break;
//    default:
//        break;
//    }
//}

void printG(MyGraph *g){
    
    for (int i = 0;i<g->NumOfVex;i++){
        
    
        for(int j = 0;j<g->NumOfVex;j++)
            {
                printf(" %d ",g->Matrix[i][j].relation);
                
            }
            printf("\n");
        }
}

int main(){
    MyGraph g;
    CreatDG(&g);
    printG(&g);
    
}

 

标签:,MyGraph,return,int,break,++,relation
From: https://www.cnblogs.com/konataxzy/p/16882270.html

相关文章