图-邻接表

#include<iostream>
#include<stdlib.h>
using namespace std;

#define maxSize 100

typedef struct ArcNode
{
    int adjvex;
    struct ArcNode *nextarc;
}ArcNode;//边节点


typedef struct
{
    char data;
    ArcNode *firstarc;
}VNode;//第一列的起始节点


typedef struct
{
    VNode adjlist[maxSize];
    int n,e;
}AGraph;

int main()
{
    AGraph G;//(AGraph *)malloc(sizeof(AGraph));;
    for(int i=0;i<5;i++)
    {
        VNode v;//=(VNode *)malloc(sizeof(VNode));
        v.data=i;
        G.adjlist[i]=v;
    }


    G.adjlist[0].firstarc->adjvex=1;
    G.adjlist[0].firstarc->nextarc->adjvex=3;
    G.adjlist[0].firstarc->nextarc->nextarc->adjvex=4;
    G.adjlist[0].firstarc->nextarc->nextarc->nextarc=NULL;

    G.adjlist[1].firstarc->adjvex=4;
    G.adjlist[1].firstarc->nextarc->adjvex=2;
    G.adjlist[1].firstarc->nextarc->nextarc=NULL;

    G.adjlist[2].firstarc->adjvex=0;
    G.adjlist[1].firstarc->nextarc=NULL;

    G.adjlist[3].firstarc->adjvex=2;
    G.adjlist[1].firstarc->nextarc=NULL;

    G.adjlist[4].firstarc->nextarc=NULL;
}














 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
的广度遍历可以使用队列来实现。下面是邻接表实现的广度遍历的步骤: 1. 创建一个队列,将起始顶点入队。 2. 创建一个 visited 数组,用来记录每个顶点是否被访问过,并将起始顶点标记为已访问。 3. 当队列不为空时,进行以下操作: a. 从队列中取出一个顶点,输出该顶点。 b. 遍历该顶点的所有邻接点,如果邻接点未被访问过,将其标记为已访问并入队。 4. 重复步骤 3,直到队列为空。 下面是邻接表实现的广度遍历的 C++ 代码: ```c++ #include <iostream> #include <queue> #include <vector> using namespace std; const int MAXN = 100; // 最大顶点数 vector<int> G[MAXN]; // 邻接表 bool visited[MAXN]; // 标记数组 void bfs(int s) { queue<int> q; q.push(s); visited[s] = true; while (!q.empty()) { int u = q.front(); cout << u << " "; q.pop(); for (int i = 0; i < G[u].size(); i++) { int v = G[u][i]; if (!visited[v]) { visited[v] = true; q.push(v); } } } } int main() { int n, m; cin >> n >> m; // 输入顶点数和边数 for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; // 输入一条边的两个端点 G[u].push_back(v); // 存储邻接关系,注意是无向 G[v].push_back(u); } bfs(1); // 从顶点 1 开始遍历 return 0; } ``` 其中,输入格式为: ``` n m // 顶点数、边数 u1 v1 u2 v2 ... um vm // m 条边的两个端点 ``` 例如,下面是一个无向邻接表和其广度遍历的示例: ``` 6 7 1 2 1 3 2 4 2 5 3 5 4 6 5 6 ``` 邻接表: ``` G[1]: 2 3 G[2]: 1 4 5 G[3]: 1 5 G[4]: 2 6 G[5]: 2 3 6 G[6]: 4 5 ``` 广度遍历结果: ``` 1 2 3 4 5 6 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值