邻接表的存图与遍历模板

91 阅读1分钟

在这里存一发,邻接表的模板:

#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
#include <stack>
#include <queue>
#include <vector>
#include <algorithm>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int inf=1<<29;
int main()
{
    int n,m,i,k;
    //存储邻接表
    int u[6],v[6],w[6];
    int first[5],next[5];
    scanf("%d%d",&n,&m);
    for(int i=1; i<=n; i++)
        first[i]=-1;
    for(i=1; i<=m; i++)
    {
        scanf("%d%d%d",&u[i],&v[i],&w[i]);
        next[i]=first[u[i]];
        first[u[i]]=i;
    }

    //遍历邻接表
    for(int i=1; i<=n; i++)
    {
        k=first[i];
        while(k!=-1)
        {
            printf("u[%d]=%d,v[%d]=%d,w[%d]=%d\n",k,u[k],k,v[k],k,w[k]);
            k=next[k];
        }
    }
    return 0;
}


其中,n代表顶点数,m代表边数,给一组样例

4 5
1 4 9
4 3 8
1 2 5
2 4 6
1 3 7


\