首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

图的储存(图论)

2012-08-28 
图的存储(图论)/* *所谓的这种存储边的方法,就是邻接链表在的静态实现(人称:池子法) *就是比较省时间开销

图的存储(图论)



/* *所谓的这种存储边的方法,就是邻接链表在的静态实现(人称:池子法) *就是比较省时间开销 */#include <cstdio>#include <cstring>#define MAXM 1000005#define MAXN 10005struct node {    int v, w, pre;}edge[MAXM<<1];int p[MAXN], nEdge;  //p每个点相关边的起始位置,nEdge总共存储的边,双向的话为2*m,单向边为mint n, m;void connect(int u, int v) {   //将边u->v加进边集    nEdge++;    edge[nEdge].pre = p[u];    edge[nEdge].v = v;    p[u] = nEdge;}int main() {    while (scanf("%d%d", &n, &m) && n && m) {        memset(p, 0, sizeof(p));        nEdge = 0;        int u, v;        for (int i=0; i<m; i++) {            scanf("%d%d", &u, &v);            connect(u, v);            connect(v, u);        }        for (int i=1; i<=n; i++) {            for (int j=p[i]; j; j=edge[j].pre)                printf("%d ", edge[j].v);            printf("\n");        }    }    return 0;}


热点排行