|
沙发
楼主 |
发表于 2019-11-6 19:35:35
|
只看该作者
链式前向星又称为邻接表的静态建表方式,其最开始确实是基于前向星,是以提高前向星的构造效率为目的设计的存储方式,最终演变成了一个变形的邻接表这一数据结构。链式前向星采用数组模拟链表的方式实现邻接表的功能(数组模拟链表的主要方式就是记录下一个节点在数组的哪个位置。),并且使用很少的额外空间,可以说是目前建图和遍历效率最高的存储方式了。
- const int mm=500050; ///最多的边数
- const int mn=10010; ///最多顶点
- int n,m,s;
- int nbs[mn],nxt[mm],ev[mm],ew[mm]; ///链式前向星
- int i,u,v,w;
-
- cin>>n>>m;///读入顶点数和边数
- for(i=1; i<=n; i++)nbs[i]=0; ///表头结点
- for(i=1; i<=m; i++)
- {
- cin>>u>>v>>w;
- nxt[i]=nbs[u];
- nbs[u]=i;
- ev[i]=v,ew[i]=w;///记录终点和权值 无向图的话要做两次
- }
- /// 看看实际的链式结构
- for (i=1; i<=n; i++) cout<<setw(4)<<nbs[i]<<' ';
- cout<<endl;
- for (i=1; i<=m; i++) cout<<setw(4)<<nxt[i]<<' ';
- cout<<endl;
- for (i=1; i<=m; i++) cout<<setw(4)<<ev[i]<<' ';
- cout<<endl;
- for (i=1; i<=m; i++) cout<<setw(4)<<ew[i]<<' ';
- cout<<endl;
- ///遍历 发现和输入的顺序有区别
- for(i=1;i<=n;i++)
- for(j=nbs[i];j!=0;j=j=nxt[j])
- cout<<i<<ev[i]<<ew[i]<<endl;
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|