当前位置:   article > 正文

图论相关内容

图论相关内容

建图

邻接矩阵

  1. void tu1() {
  2. cin >> n >> m;
  3. for (int i = 1; i <= m; i++) {
  4. int u, v;
  5. cin >> u >> v;
  6. //int w;cin>>w;--->边权
  7. mp[u][v] = 1;//w
  8. //mp[v][u] = 1;//w --->无向图
  9. }
  10. }

邻接表

  1. void tu2() {
  2. vector<vector<int>>adj(N);
  3. cin >> n >> m;
  4. for (int i = 1; i <= m; i++) {
  5. int u, v;
  6. cin >> u >> v;
  7. //cin>>a[i] 边权
  8. adj[u].push_back(v);
  9. adj[v].push_back(u);//无向
  10. }
  11. }

链式前向星

  1. #include<iostream>
  2. using namespace std;
  3. const int maxn = 1005;//点数最大值
  4. int n, m, cnt;//n个点,m条边
  5. struct Edge
  6. {
  7. int to, w, next;//终点,边权,同起点的上一条边的编号
  8. }edge[maxn];//边集
  9. int head[maxn];//head[i],表示以i为起点的第一条边在边集数组的位置(编号)
  10. void init()//初始化
  11. {
  12. for (int i = 0; i <= n; i++) head[i] = -1;
  13. cnt = 0;
  14. }
  15. void add_edge(int u, int v, int w)//加边,u起点,v终点,w边权
  16. {
  17. edge[cnt].to = v; //终点
  18. edge[cnt].w = w; //权值
  19. edge[cnt].next = head[u];//以u为起点上一条边的编号,也就是与这个边起点相同的上一条边的编号
  20. head[u] = cnt++;//更新以u为起点上一条边的编号
  21. }
  22. int main()
  23. {
  24. cin >> n >> m;
  25. int u, v, w;
  26. init();//初始化
  27. for (int i = 1; i <= m; i++)//输入m条边
  28. {
  29. cin >> u >> v >> w;
  30. add_edge(u, v, w);//加边
  31. /*
  32. 加双向边
  33. add_edge(u, v, w);
  34. add_edge(v, u, w);
  35. */
  36. }
  37. for (int i = 1; i <= n; i++)//n个起点
  38. {
  39. cout << i << endl;
  40. for (int j = head[i]; j != -1; j = edge[j].next)//遍历以i为起点的边
  41. {
  42. cout << i << " " << edge[j].to << " " << edge[j].w << endl;
  43. }
  44. cout << endl;
  45. }
  46. return 0;
  47. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/198279
推荐阅读
相关标签
  

闽ICP备14008679号