数据结构-邻接表学习

转载请注明来源https://www.cnblogs.com/TheSilverMoon/p/9309491.html

在学会邻接矩阵之后,我等渣渣算是了解了一种图的储存方式,但是邻接矩阵有着一个缺点,那就是不适合存稀疏图(时空复杂度均为n^2),否则会爆Memory,然后你就会收到一个长得真不怎么好看的MLE。这个时候邻接表就来了,简单理解的话就是用单链表来表示图。

 有向无权图

#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define fio ios::sync_with_stdio(false);cin.tie(0);
#define pii pair<int,int>
#define vi vector<int>
#define vc vector<char>
#define pi 3.1415926
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1

const int INF=0x3f3f3f3f;
const int N=2e5+5;

typedef long long ll;
typedef double db;
typedef unsigned long long ull;
using namespace std;

vi Graph[N];

int main()
{
    fio;
    int n,m;//n个点,m组数据
    cin>>n>>m;
    int start,to;
    for (int i=1;i<=m;i++)
    {
        cin>>start>>to;
        Graph[start].pb(to);//有向无权图
    }
}

无向无权图

int main()
{
    fio;
    int n,m;//n个点,m组数据
    cin>>n>>m;
    int start,to;
    for (int i=1;i<=m;i++)
    {
        cin>>start>>to;
        Graph[start].pb(to);
        Graph[to].pb(start);
    }
}

有向有权图

#include <bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define fio ios::sync_with_stdio(false);cin.tie(0);
#define pii pair<int,int>
#define vi vector<int>
#define vc vector<char>
#define pi 3.1415926
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1

const int INF=0x3f3f3f3f;
const int N=2e5+5;

typedef long long ll;
typedef double db;
typedef unsigned long long ull;
using namespace std;

struct node
{
    int to;
    int value;
};

vector<node> Graph[N];
int main()
{
    fio;
    int n,m;//n个点,m组数据
    cin>>n>>m;
    int start,to;
    for (int i=1;i<=m;i++)
    {
        node temp;
        cin>>start>>temp.to>>temp.value;
        Graph[start].pb(temp);
    }
}

有向无权图

struct node
{
    int to;
    int value;
};

vector<node> Graph[N];
int main()
{
    fio;
    int n,m;//n个点,m组数据
    cin>>n>>m;
    int start,to;
    for (int i=1;i<=m;i++)
    {
        node temp;
        cin>>start>>temp.to>>temp.value;
        Graph[start].pb(temp);
        swap(start,temp.to);
        Graph[start].pb(temp);
    }
}
原文地址:https://www.cnblogs.com/TheSilverMoon/p/9309491.html