链式前向星储存

#include <iostream>
#include <cstring>
using namespace std;

#define E 10000
#define V 100

struct Edge{

    int to_node;
    int edge_val;
    int next_edge;

    Edge(){}
    Edge( int to, int val, int next ){
        to_node   = to;
        edge_val  = val;
        next_edge = next;
    }
};

Edge edges[E];
int heads[V];

int nEdgeNum, nNodeNum;
int nEdgeCount;

void addEdge( int from, int to, int dist ){

    edges[nEdgeCount].to_node   = to;
    edges[nEdgeCount].edge_val  = dist;
    edges[nEdgeCount].next_edge = heads[from];
    heads[from]                 = nEdgeCount;

    nEdgeCount++;

}

void showGraph(){
    for( int i = 1; i <= nNodeNum; ++i ){

        cout << i;

        for( int j = heads[i]; ~j; j = edges[j].next_edge ){
            cout << "-->" << edges[j].to_node << "(" << edges[j].edge_val << ")";
        }

        cout << "-->NULL" << endl;

    }
}

int main(){

    int from, to, dist;

    while( cin >> nNodeNum >> nEdgeNum ){

        memset( heads, -1, sizeof( heads ) );

        for( int i = 1; i <= nEdgeNum; ++i ){

            cin >> from >> to >> dist;

            addEdge( from, to, dist );

        }

        showGraph();

    }

    return 0;
}
时间: 2024-10-09 00:45:08

链式前向星储存的相关文章

UESTC30-最短路-Floyd最短路、spfa+链式前向星建图

最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的T-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据. 每组数据第一行是两个整数NN ,MM (N≤100N≤100 ,M≤10000M≤1000

链式前向星

重要的事情说三遍 明天不学会链式前向星我绝食三天

图的存储结构:邻接矩阵(邻接表)&amp;链式前向星

[概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组graph[ ][ ]来记录图中点a与点b之间是否连通,初始化为0(或者-1之类的看情况):如果图中有可忽略的重边(如 只需重边中的最小边或最大边),则保存需要的那条边的边权,但如果有无法忽略的重边,就一定不要用邻接矩阵. int graph[MAXN][MAXN]; void graphInit() { me

HDU3342 Legal or Not【拓扑排序】【链式前向星】

Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4633    Accepted Submission(s): 2115 Problem Description ACM-DIY is a large QQ group where many excellent acmers get together. It is

前向星和链式前向星

前向星和链式前向星 1.前向星 前向星是以存储边的方式来存储图,先将边读入并存储在连续的数组中,然后按照边的起点进行排序,这样数组中起点相等的边就能够在数组中进行连续访问了.它的优点是实现简单,容易理解,缺点是需要在所有边都读入完毕的情况下对所有边进行一次排序,带来了时间开销,实用性也较差,只适合离线算法.图一-2-4展示了图一-2-1的前向星表示法. 2.链式前向星(就是数组模拟链表) 链式前向星和邻接表类似,也是链式结构和线性结构的结合,每个结点i都有一个链表,链表的所有数据是从i出发的所有

NYOJ 20 吝啬的国度 【BFS+链式前向星建图,Vector建图】

吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路). 输入 第一行输入一个整数M表示测试数据共有M(1<=M<=5)组 每组测试数据的第一行输入一个正整数N(1<=N<=100000)和一个正整数S(1<=S<=100000

链式--前向星算法(转载学习)*重点*【模板】

转载地址:http://blog.csdn.net/acdreamers/article/details/16902023 我们首先来看一下什么是前向星. 前向星是一种特殊的边集数组,我们把边集数组中的每一条边按照起点从小到大排序,如果起点相同就按照终点从小到大排序, 并记录下以某个点为起点的所有边在数组中的起始位置和存储长度,那么前向星就构造好了. 用len[i]来记录所有以i为起点的边在数组中的存储长度. 用head[i]记录以i为边集在数组中的第一个存储位置. 那么对于下图: 我们输入边的

链式前向星BFS

采用链式前向星的BFS: #include <iostream> #include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <queue> using namespace std; typedef long long LL; const int maxN = 100 + 3;

链式前向星DFS

采用链式前向星存图的DFS: #include <iostream> #include <cmath> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <queue> using namespace std; typedef long long LL; const int maxN = 100 + 3