前向星
其实就是邻接表换个皮
- 优点:可用在点的数目较多和边数较多时。
- 缺点:不能直接根据起点终点定位。
实现
若使用前向星进行存储,则应有:
1.从1号节点开始存入,有2,3,5三个节点,所以有数组为
2 | 3 | 5 |
---|
到了2节点有出度为1,在第一步数组基础上加入3节点,指向为3有数组更新为
2 | 3 | 5 | 3 |
---|
依次更新数组,最后可得到:
2 | 3 | 5 | 3 | 4 | 1 | 5 |
---|
虽然图的信息都进行了录入,但是却无法访问,因为丢失了起点信息,并不知道那个点开始是n号节点的第一个尾节点,也不知道n号节点有几个出度,所以为了访问方便,再加入两个数组head[i]存入I号节点第一个尾节点,len[i]存入I号节点共有几个尾节点。这样存储就完成了。
试想用二维数组进行存储,那么就不用考虑这个问题了,但二维数组占用内存较大,可以用c++中的vector代替。
实现
#include<iosteram>
#include<vector>
using namespace std;
const int maxn=10000;
vector<int>edge[maxn];
int main()
{
int m, n;//图的节点数和边数。
int s, e;//开始和结尾;
for(int i=0; i<m; i++)
{
cin>>>s>>e;
edge[s].push_back(e);
}
return 0;
}