그림 저장 구조의 실현

5055 단어 데이터 구조
인접 행렬
#include 
#include 
#include 

#define MAX_VERTEX_NUM 20//      
#define VRType int //     
#define InfoType char//             
#define VertexType int//      
typedef enum{DG,DN,UDG,UDN}GraphKind;//        
typedef struct//    
{
    VRType adj;//      0 1
    //        
    InfoType *info;//            
}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct // 
{
    VertexType vexs[MAX_VERTEX_NUM];//      
    AdjMatrix arcs;//          
    int vexnum,arcnum;//   ,  
    GraphKind kind;
}MGraph;


//         
int LocateVex(MGraph *G,VertexType v)
{
    int i=0;
    for(;ivexnum;i++)
    {
        if(G->vexs[i]==v)
        {
            break;
        }
    }
    if(i>=G->vexnum)
    {
        printf("       
"); return -1; } return i; } // void CreateDG(MGraph *G) { scanf("%d%d",&(G->vexnum),&(G->arcnum));// for(int i=0;ivexnum;i++) { scanf("%d",&(G->vexs[i])); }// for(int i=0;ivexnum;i++) { for(int j=0;jvexnum;j++) { G->arcs[i][j].adj=0; G->arcs[i][j].info=NULL; } }// , , NULL for(int k=0;karcnum;k++) { int v1,v2; scanf("%d%d",v1,v2); int i=LocateVex(G,v1); int j=LocateVex(G,v2); if(i==-1||j==-1) { printf(" "); return ; } G->arcs[i][j].adj=1; } } // void CreateDN(MGraph *G) { scanf("%d%d",&(G->vexnum),&(G->arcnum)); for(int i=0;ivexnum;i++) { scanf("%d",&(G->vexs[i])); } for(int i=0;ivexnum;i++) { for(int j=0;jvexnum;j++) { G->arcs[i][j].adj=0; G->arcs[i][j].info=NULL; } } for(int k=0;karcnum;k++) { int v1,v2; scanf("%d%d",&v1,&v2); int i=LocateVex(G,v1); int j=LocateVex(G,v2); if(i==-1||j==-1) { printf("
"); return ; } G->arcs[i][j].adj=1; G->arcs[j][i].adj=1;// , } } // void CreateUDG(MGraph *G) { scanf("%d%d",&(G->vexnum),&(G->arcnum)); for(int i=0;ivexnum;i++) { scanf("%d",&(G->vexs[i])); } for(int i=0;ivexnum;i++) { for(int j=0;jvexnum;j++) { G->arcs[i][j].adj=INT_MAX;// G->arcs[i][j].info=NULL; } } for(int k=0;karcnum;k++) { int v1,v2,w; scanf("%d%d%d",&v1,&v2,&w); int i=LocateVex(G,v1); int j=LocateVex(G,v2); if(i==-1||j==-1) { printf("
"); return; } G->arcs[i][j].adj=w; } } // void CreateUDN(MGraph *G) { scanf("%d%d",&(G->vexnum),&(G->arcnum)); for(int i=0;ivexnum;i++) { scanf("%d",&(G->vexs[i])); } for(int i=0;ivexnum;i++) { for(int j=0;jvexnum;j++) { G->arcs[i][j].adj=INT_MAX; G->arcs[i][j].info=NULL; } } for(int k=0;karcnum;k++) { int v1,v2,w; scanf("%d%d%d",&v1,&v2,&w); int i=LocateVex(G,v1); int j=LocateVex(G,v2); if(i==-1||j==-1) { printf("
"); return; } G->arcs[i][j].adj=w; G->arcs[j][i].adj=w; } } // void CreateGraph(MGraph *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 PrintGraph(MGraph G) { for(int i=0;i

인접 표
#include 
#include 
#include 

#define MAX_VERTEX_NUM 20//      
#define VertexType int //      
#define InfoType int //        
typedef struct ArcNode//      
{
    int adjvex;//            
    struct ArcNode *nextarc;//        
    InfoType *info;//   
}ArcNode;
typedef struct VNode
{
    VertexType data;//     
    ArcNode *firstarc;//        
}VNode,AdjList[MAX_VERTEX_NUM];//           
typedef struct {
    AdjList vertices;//       
    int vexnum,arcnum;//        
    int kind;//      
}ALGraph;

좋은 웹페이지 즐겨찾기