存图(8)
2020-02-02 19:45
141 查看
存图
本来这个东西不写了,因为太简单了。但是为防止产生疑问,还是给大家写一下。
先说什么是图:
图由点和边组成记顶点集合为V 边集合为E的图为G=(V,E)。简单来说图就是把一个具体的问题进行抽象化。你可以把边当作道路,把点当作房子。
再说图的种类:(其实就是看带不带箭头)
无向图:图中的所有边不分方向,你既可以顺行也可以逆行。
有向图:图中的所有边都是有方向的,你只能沿着边的方向走。
无权图:你不知道两点之间的距离
带权图:你知道两点之间的距离
接下来就是存图的方式了:
邻接矩阵:(不能存点的数量多的图)
我们定义一个数组a[MAXN][MAXN]; 那么存图方式就是:a[i][j]=val;
对于无向图,就代表i和j之间有一条权值为val的边,如果是无权图,val=1。
对于有向图,就代表i->j(j->i你不清楚)有一条权值为val的边,无权图的话val=1。
邻接表法:(用vector存)
vector <int> e[MAXN];//edge vector <int> v[MAXN];//val cin>>a>>b>>c; e[a].push_back(b); v[a].push_back(c); e[b].push_back(a); v[b].push_back(c); //假如还有距离,就要用到前面学的pair了 vector < pair <int ,int > > V [ maxn ]; V [ x ]. push_back ( make_pair (y , z )); //xy为两点,z为距离 V [ y ]. push_back ( make_pair (x , z ));
看似有点难,其实后面慢慢就会了。。。
链式前向星
我的天,这个是真的强,但是我是真的不会,若读者想了解,可以问度娘,嘿嘿!!!
- 点赞
- 收藏
- 分享
- 文章举报