利用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
 6 #define maxE 10000
 7 struct EdgeNode
 8 {
 9     int to;
10     int w;
11 };
12 vector<EdgeNode> map[maxN];
13
14 int main(int argc, char** argv) {
15     int n,m;
16     int i,j,w;
17     EdgeNode e;
18     freopen("data.in","r",stdin);
19     cin>>n>>m;//n个点,m条边
20
21     for(int k=0;k<m;k++)
22     {
23         cin>>i>>j>>w;
24         e.to=j;
25         e.w=w;
26         map[i].push_back(e);
27     }
28
29     for(i=1;i<=n;i++)
30     {
31         for(vector<EdgeNode>::iterator k=map[i].begin();k!=map[i].end();k++)
32         {
33             EdgeNode t=*k;
34             cout<<i<<‘ ‘<<t.to<<‘ ‘<<t.w<<endl;
35         }
36     }
37     return 0;
38 }

输入样例:

8 12
5 8 29
6 1 12
8 3 11
1 2 4
3 1 22
4 3 17
7 4 25
6 5 9
8 7 7
1 6 9
3 2 19
6 7 4

运行结果:

1 2 4
1 6 9
3 1 22
3 2 19
4 3 17
5 8 29
6 1 12
6 5 9
6 7 4
7 4 25
8 3 11
8 7 7

原文地址:https://www.cnblogs.com/huashanqingzhu/p/9261086.html

时间: 2024-11-08 21:31:23

利用C++ STL的vector模拟邻接表的代码的相关文章

Hihocoder 之 #1097 : 最小生成树一&#183;Prim算法 (用vector二维 模拟邻接表,进行prim()生成树算法, *【模板】)

#1097 : 最小生成树一·Prim算法 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了! 但是,问题也接踵而来——小Hi现在手上拥有N座城市,且已知这N座城市中任意两座城市之间建造道路所需要的费用,小Hi希望知道,最少花费多少就可以使得任意两座城市都可以通过所建造的道路互相到达(假设有A.B.C三座城市,只需要在AB之间和BC之间建造道路,那么AC之间也是可以通过

SDUT OJ 图练习-BFS-从起点到目标点的最短步数 (vector二维数组模拟邻接表+bfs , *【模板】 )

图练习-BFS-从起点到目标点的最短步数 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 在古老的魔兽传说中,有两个军团,一个叫天灾,一个叫近卫.在他们所在的地域,有n个隘口,编号为1..n,某些隘口之间是有通道连接的.其中近卫军团在1号隘口,天灾军团在n号隘口.某一天,天灾军团的领袖巫妖王决定派兵攻打近卫军团,天灾军团的部队如此庞大,甚至可以填江过河.但是巫妖王不想付出不必要的代价,他想知道在不修建任何通道的前提下,部队是否

做了一道跑大数据的最短路挂了,基于vector的二维模拟邻接表实现Dijkstra算法(*【模板】)

代码: #include <stdio.h> #include <string.h> #include <string> #include <vector> #include <algorithm> #define INF 2100000000 using namespace std; int n; struct node { int dd; int w; }t; vector<node>q[500001]; unsigned int

基于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",&

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

用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,那么在调

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

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

&lt;图论入门&gt;邻接矩阵+邻接表

非本人允许请勿转载. 趁热打铁,学会了邻接表把这个总结一下,以及感谢大佬uncle-lu!!!(奶一波)祝早日进队! 首先,图论入门就得是非常基础的东西,先考虑怎么把这个图读进去. 给定一个无向图,如下 怎么把这个图的数据读入进去呢? 把这个图剖析开来看,1连着的是2和3,2连着4和5,3连着6和7,4连着5,5连着8和6,6连着9. 所以这个图可以用一种神奇的东西----邻接矩阵来存.如下,能联通的制为1,不能联通的制为0. 那么可以看出来,这个邻接矩阵光读入的时间复杂度就是O(N2)的了,在

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>

ACM/ICPC 之 数据结构-邻接表+DP+队列+拓扑排序(TshingHua OJ-旅行商TSP)

做这道题感觉异常激动,因为在下第一次接触拓扑排序啊= =,而且看了看解释,猛然发现此题可以用DP优化,然后一次A掉所有样例,整个人激动坏了,哇咔咔咔咔咔咔咔~ 咔咔~哎呀,笑岔了- -|| 旅行商(TSP) Description Shrek is a postman working in the mountain, whose routine work is sending mail to n villages. Unfortunately, road between villages is