首页 > 其他 > 详细

图的建立的两种方法(领接矩阵,领接表)

时间:2015-12-01 19:34:21      阅读:360      评论:0      收藏:0      [点我收藏+]
//图的建立的实现->邻结矩阵和邻结表两种表示方法

#include <cstdio>
#include <cstdlib>
//#define _OJ_
typedef struct Graph1
{
    int nv;
    int ne;
    int elem[100][100];
} Graph1, *Graph;

typedef struct Edge1
{
    int v1, v2;
    // int weight;权重
} Edge1, *Edge;

Graph
creat_graph(int vertex, int edge2)
{
    int i, j;
    Graph g;
    g = (Graph) malloc (sizeof(Graph1));
    g->nv = vertex;
    g->ne = edge2;

    for(i = 0;i < vertex; i++) {
       for(j = 0;j < vertex; j++) {
          g->elem[i][j] = 0;
        }
     }

    return g;
}

void
inser_v(Graph g, int v1, int v2)
{
     g->elem[v1][v2] = 1;

     g->elem[v2][v1] = 1;//无向图则要写两个 == 1, 或者 == weight
}

Graph
build_graph(void)
{
    Graph g;
    Edge e;
    int nv, ne, i;
    scanf("%d %d", &nv, &ne);
    g = creat_graph(nv,ne);

    if(ne > 0) {
    e = (Edge) malloc (sizeof(Edge1));
    for(i = 0;i < ne; i++) {
        scanf("%d %d", &e->v1, &e->v2);
        inser_v(g, e->v1, e->v2);
       }
    }

    return g;
}

int main(int argc, char const *argv[]) {
#ifndef _OJ_  //ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif

    int i, j;
    Graph g;
    g = build_graph();
    for(i = 0;i < g->nv; i++) {
       for(j = 0;j < g->nv; j++) {
           printf("%d ", g->elem[i][j]);
        }
       printf("\n");
     }
  
    return 0;
}

 更为简单的一种方法如下

// --------------------------------------------------------------------------------
// 更为简单的方法
  int elem[100][100];
    int i, j, nv, ne, v1, v2;
    scanf("%d %d", &nv, &ne);
    for(i = 0;i < nv; i++) {
         for(j = 0;j < nv; j++) {
         elem[i][j] = 0;
          }
     }

     for(i = 0;i < ne; i++) {
     scanf("%d %d", &v1, &v2);
     elem[v1][v2] = 1;    elem[v2][v1] = 1;
      }

 

图的建立的两种方法(领接矩阵,领接表)

原文:http://www.cnblogs.com/airfand/p/5011049.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!