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