基于vector的邻接表的建立

 /*有向无权图*/

1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef struct {
 4  vector<char> graph;
 5     char a;
 6
 7 }zx[1000];
 8 int main()
 9 {
10     zx z;
11     int n,m;
12     cout<<"输入点的数量和边的数量"<<endl;
13    scanf("%d%d",&n,&m);
14    cout<<"输入点的名"<<endl;
15    for(int i=1;i<=n;i++){
16        cin>>z[i].a;
17    }
18    cout<<"输入点的关系"<<endl;
19        char ll,kk;
20        for(int i=1;i<=m;i++){
21            cin>>ll>>kk;
22            for(int i=1;i<=n;i++){
23                if(ll==z[i].a){
24                    z[i].graph.push_back(kk);
25                }
26            }
27
28        }
29        cout<<"输出"<<endl;
30
31        for(int i=1;i<=n;i++)
32        {
33            cout<<endl;
34            cout<<z[i].a<<":->";
35            for(vector <char>::iterator j=z[i].graph.begin();j!=z[i].graph.end();j++){
36           cout<<*j<<"->";//暂时未完美输出
37        }}
38
39        return 0;
40 }
时间: 2024-11-10 07:09:32

基于vector的邻接表的建立的相关文章

ACM:最短路,dijkstra,邻接表的建立,使用邻接表跟优先队列的dijkstra,Bellman-Ford,Floyd。。

(一)dijkstra,邻接矩阵 所有边权均为正,不管有没有环,求单个源点出发,到所有节点的最短路.该方法同时适用于有向图和无向图. #include <iostream> #include <string> #include <stack> using namespace std; const int MAXN = 1000; const int INF = 100000000; int n, m; int maze[MAXN][MAXN], vis[MAXN], d

利用C++ STL的vector模拟邻接表的代码

关于vector的介绍请看 https://www.cnblogs.com/zsq1993/p/5929806.html https://zh.cppreference.com/w/cpp/container/vector 下面是利用vector模拟邻接表的演示代码: 1 #include<iostream> 2 #include<stdio.h> 3 #include<vector> 4 using namespace std; 5 #define maxN 100

vector 邻接表的建立(好笨啊,才懂,可能太困了吧)。。

图的建立有两种,邻接矩阵和邻接表. 邻接矩阵适用于图较为密集,(稀疏图太浪费存储空间了),图如果较为稀疏,则使用邻接表为宜,dijkstra算法就是以邻接表为基础的. 有向无权图 #include<iostream> #include <vector> #include <algorithm> #include <queue> #include <stack> using namespace std; #define N 100000+5 vec

基于邻接矩阵和邻接表的两种方法实现无向图的BFS和DFS

广度优先搜索(Breadth-First-Search)和深度优先搜索(Deep-First-Search)是搜索策略中最经常用到的两种方法,特别常用于图的搜索. BFS的思想: 从一个图的某一个顶点V0出发,首先访问和V0相邻的且未被访问过的顶点V1.V2.--Vn,然后依次访问与V1.V2--Vn相邻且未被访问的顶点.如此继续,找到所要找的顶点或者遍历完整个图.我们采用队列来存储访问过的节点. DFS的思想: 深度优先搜索所遵循的策略就是尽可能"深"的在图中进行搜索,对于图中某一个

Dijkstra[两种邻接表+优先队列优化]

Dijksta算法中,如果我们采用的是邻接矩阵来存的,第一点浪费的空间比较多,第二点我们知道算法的时间复杂度在O(n*n),这样的算法可以说并不是很好,所以我们考虑优化它首先我们可以优化存储结构,采用邻接表来存储,其次我们可以用优先队列来排序大小,其时间复杂度大大降低. 需要注意的是pair是按照第一个元素的大小排序,如果相同才按照第二个,所以我们要把d[i]包装在第一个元素上. vector实现邻接表+优先队列 (假设边一开始是字符型的,这么假设是为了加点难度) #include<iostre

POJ 1511 Invitation Cards 邻接表 spfa算法

原题: http://poj.org/problem?id=1511 题目大意: 单向图,需要从点1到每个点去一次,去了马上回来,再去下一个点,求往返路径和. 如果只有100个点,跑一遍floyd就可以了,这里有10w个点,不行. 朴素的dijkstra是N^2的复杂度,这里要超时. 所以这里我们用spfa这种接近2N的算法. 由于二维数组空间不够,所以只能用vector或者邻接表,因为vector的适合经常修改,本身是链表结构,每次插入数据都会消耗时间来申请内存并和前面建立联系,虽然可以支持下

图的连通分量(利用邻接表存储信息)

用vector实现邻接表 vector <int> G[100]; //表示有100个顶点的图的邻接表 G[u].push_back(v); //从顶点u 向顶点v 画边,即在相当于创建一个二维数组G[100][i] //搜索与顶点u 相邻的顶点v for( int i = 0; i < G[u].size(); i++) { int v = G[u][i]; ....... } 邻接表表示法的优点 只需与边数成正比的内存空间 邻接表表示法的缺点 (1)设u 的相邻顶点数量为n,那么在调

图的邻接表表示、广度优先、深度优先搜索

图,就是我们在数据结构中学到的图,它是一种存储信息的结构.图是一类在实际应用中非常常见的数据结构,当数据规模大到一定程度时,如何对其进行高效计算即成为迫切需要解决的问题.最常见的大规模图数据的例子就是互联网网页数据,网页之间通过链接指向形成规模超过500 亿节点的巨型网页图.再如,Facebook 社交网络也是规模巨大的图,仅好友关系已经形成超过10 亿节点.千亿边的巨型图,考虑到Facebook 正在将所有的实体数据节点都构建成网状结构,其最终形成的巨型网络数据规模可以想见其规模.要处理如此规

ACM/ICPC 之 最短路-SPFA+正逆邻接表(POJ1511(ZOJ2008))

求单源最短路到其余各点,然后返回源点的总最短路长,以构造邻接表的方法不同分为两种解法. POJ1511(ZOJ2008)-Invitation Cards 改变构造邻接表的方法后,分为两种解法 解法一: 1 //POJ1511-ZOJ2008 2 //Time:7766Ms Memory:99112K 3 //求从1处到各点后再返回1处的最短总路长 4 //需要构造邻接表和逆邻接表 5 //构造方法1:vector构造邻接表 6 //SPFA+邻接表 7 #include<iostream>