链式前向星BFS

采用链式前向星的BFS:

#include <iostream>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long LL;

const int maxN = 100 + 3;
const int maxM = 1000 + 3;
int head[maxN];
int visited[maxN];
int N, M;

struct EdgeNode
{
    int to;
    int w;
    int next;
};
EdgeNode Edges[maxM];

void BFS(int x)
{
    memset(visited, 0, sizeof(visited));
    queue<int> initQueue;
    for(int i = 1; i <= N; i++)
    {
        if( !visited[i] )
        {
            visited[i] = 1;
            initQueue.push( i );
            while( !initQueue.empty() )
            {
                i = initQueue.front(); //取得对头的节点,一定是下次待扩展的节点
                initQueue.pop();//队顶元素出队(出队代表着访问到了这个节点)
            //遍历与当前节点相连的节点
                for(int j = head[i]; j !=  -1; j = Edges[j].next)
                {
                  //如果没被访问,入队
                    if( !visited[ Edges[j].to ])
                    {
                        visited[ Edges[j].to ] = 1;
                        initQueue.push( Edges[j].to );
                    }
                }
            }
        }
    }
}

int main()
{
    freopen("input.txt", "r", stdin);
    memset(head, -1, sizeof(head));
    cin >> N >> M;
    for(int i = 1; i <= M; i++)
    {
        int x, y ,z;
        cin >> x >> y >> z;
        Edges[i].to = y;
        Edges[i].w = z;
        Edges[i].next = head[x];
        head[x] = i;
    }
    memset(visited, 0, sizeof(visited));
    BFS(1);
    return 0;
}
时间: 2024-12-14 12:31:15

链式前向星BFS的相关文章

NYOJ 20 吝啬的国度 【BFS+链式前向星建图,Vector建图】

吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路). 输入 第一行输入一个整数M表示测试数据共有M(1<=M<=5)组 每组测试数据的第一行输入一个正整数N(1<=N<=100000)和一个正整数S(1<=S<=100000

链式前向星写法下的DFS和BFS

Input 5 7 1 2 2 3 3 4 1 3 4 1 1 5 4 5 output 1 5 3 4 2 #include<bits/stdc++.h> using namespace std; const int maxn = 150; const int maxm = 1050; int n, m;//顶点数,边数 int head[maxm], tot; bool used[maxn]; //head[u]表示已知的最后一条以u为起点的边在边集e中的下标 struct edge {

链式前向星-学习笔记

模板: 数据结构: int head[LEN]; //记录源点u在mp中第一个地址i=head[u] 调用完之后就可以用mp[i]访问边表mp int cnt=0; //边表下标,随着数据的录入而扩张 struct edge{ //边 int to,next,w; }; edge mp[LEN]; //边表 加边函数: void add(int u,int v,int w){ //增加边 mp[cnt].to=v; mp[cnt].w=w; mp[cnt].next=head[u]; //指向源

【前向星】链式前向星实现以及它的遍历

深度理解链式前向星 链式前向星的构成由一个结构体(包括目标点.边权值和下一个同起点的边)和head数组(用于存放某点的第一条出边) 必要的时候还可以添加一个统计入度的数组,因为进行BFS DFS的时候是依靠点的出度和出边的邻接关系来进行的.假如有多于一个点的入度为0,那么将只能遍历到其中一个点以及往后的内容. 对于链式前向星:链式前向星每添加一条边就会更新head数组,使得head数组存放的总是最新添加的某点的出边,此出边的next总指向head数组之前存放的出边的序号. 我们输入边的顺序为:

poj-1459-最大流dinic+链式前向星

title: poj-1459-最大流dinic+链式前向星 date: 2018-11-22 20:57:54 tags: acm 刷题 categories: ACM-网络流-最大流 概述 这道是一道网络流里最大流的板子题,,, 暑期集训网络流草草水过,,连基本的算法都不知道有哪些,,,更别提怎么实现了,,,只知道网络流的大致的概念,, 今天花了一天的时间重新学习了一波,,,本以为这东西很简单,,,没想到不仅算法的实现一大堆的东西,,就连题目都有时候看不懂,,,,感受就是网络流的题不仅算法实

UESTC30-最短路-Floyd最短路、spfa+链式前向星建图

最短路 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的T-shirt.但是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的!所以现在他们想要寻找最短的从商店到赛场的路线,你可以帮助他们吗? Input 输入包括多组数据. 每组数据第一行是两个整数NN ,MM (N≤100N≤100 ,M≤10000M≤1000

链式前向星

重要的事情说三遍 明天不学会链式前向星我绝食三天

图的存储结构:邻接矩阵(邻接表)&amp;链式前向星

[概念]疏松图&稠密图: 疏松图指,点连接的边不多的图,反之(点连接的边多)则为稠密图. Tips:邻接矩阵与邻接表相比,疏松图多用邻接表,稠密图多用邻接矩阵. 邻接矩阵: 开一个二维数组graph[ ][ ]来记录图中点a与点b之间是否连通,初始化为0(或者-1之类的看情况):如果图中有可忽略的重边(如 只需重边中的最小边或最大边),则保存需要的那条边的边权,但如果有无法忽略的重边,就一定不要用邻接矩阵. int graph[MAXN][MAXN]; void graphInit() { me

HDU3342 Legal or Not【拓扑排序】【链式前向星】

Legal or Not Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4633    Accepted Submission(s): 2115 Problem Description ACM-DIY is a large QQ group where many excellent acmers get together. It is