데이터 구조 (11): 그림 의 저장 방식 (인접 행렬, 인접 표...)

6895 단어 데이터 구조
/*              */
#include 
using namespace std;

#define MAXVEX 100                  //           (     ) 
#define INFINITY 65535              //  66535    '   ' 
typedef char VertexType;            //            (     ) 
typedef int EdgeType;               //         (     ) 

//          
typedef struct
{
    VertexType vexs[MAXVEX];        //     
    EdgeType arc[MAXVEX][MAXVEX];   //      
    int numVertexes, numEdges;      //              
} MGraph;

/*               */
void CreateMGraph(MGraph *G)
{
    int i,j,k,w;
    cout<<"        :";
    cin>>G->numVertexes>>G->numEdges;

                                        //         
    for(i=0; inumVertexes; i++)
        cin>>G->vexs[i];

                                        //         
    for(i=0; inumVertexes; i++)
        for(j=0; jnumVertexes; j++)
            G->arc[i][j] = INFINITY;
                                        //        
    for(k=0; knumEdges; k++)        
    {
        cout<<"   (vi,vj)    i    j        w:";
        cin>>i>>j>>w;

        G->arc[i][j] = w;
        G->arc[j][i] = G->arc[i][j];    //    ,     
    }

}
/*             */
#include 
using namespace std;

#define MAXVEX 100                  //           (     ) 
typedef char VertexType;            //            (     ) 
typedef int EdgeType;               //         (     ) 

//      (  )
typedef struct EdgeNode
{
    int adjvex;                     //     ,           
    EdgeType weight;                //        
    struct EdgeNode *next;          //   ,         
} EdgeNode;

//       (  )
typedef struct VertexNode
{
    VertexType data;                //     ,       
    EdgeNode *firstedge;            //       
} VertexNode, AdjList[MAXVEX];

//     
typedef struct
{
    AdjList adjList;
    int numVertexes,numEdges;       //            
} GraphAdjList;

/*           */
void CreateALGraph(GraphAdjList *G)
{
    int i,j,k;
    EdgeType w;
    EdgeNode *e;
                                        //          
    cout<<"        :";
    cin>>G->numVertexes>>G->numEdges;
                                            //        
    cout<<"        :"<for(i=0; inumVertexes; i++)
    {
        cin>>G->adjList[i].data;
        G->adjList[i].firstedge = NULL;     //         
    }
                                            //       
    cout<<"    (vi,vj)          :"<for(k=0; knumEdges; k++)
    {
        cin>>i>>j>>w;

        e = new EdgeNode;                   //             

        e->adjvex = j;                      //      j 
        e->weight = w;                      //       w 
        e->next = G->adjList[i].firstedge;  //                
        G->adjList[i].firstedge = e;        //               

        e->adjvex = i;                      //      i
        e->weight = w;                      //       w 
        e->next = G->adjList[j].firstedge;  //               
        G->adjList[j].firstedge = e;        //              
    }
}

좋은 웹페이지 즐겨찾기