//图的建立的实现->邻结矩阵和邻结表两种表示方法 #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