• 图结构练习—BFSDFS—判断可达性(BFS)


    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2138

    注意该图为有向图,1000个点应该最多有1000*999条边。在这跪了一下。。。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<queue>
     4 
     5 using namespace std;
     6 
     7 const int maxn=1000002;
     8 int head[maxn],vis[maxn];
     9 int n,m,cnt;
    10 struct node
    11 {
    12     int u;
    13     int v;
    14     int next;
    15 } edge[maxn];
    16 void add(int u,int v)
    17 {
    18     edge[cnt].u = u;
    19     edge[cnt].v = v;
    20     edge[cnt].next = head[u];
    21     head[u] = cnt++;
    22 }
    23 int  bfs(int s)
    24 {
    25 
    26     queue<int>q;
    27     q.push(s);
    28     vis[s] = 1;
    29     while(!q.empty())
    30     {
    31         int u = q.front();
    32         if (u==1)
    33             return 1;
    34         q.pop();
    35         for (int j = head[u]; j!=-1; j = edge[j].next)
    36         {
    37             int v = edge[j].v;
    38             if (!vis[v])
    39             {
    40                 vis[v] = 1;
    41                 q.push(v);
    42             }
    43         }
    44     }
    45     return 0;
    46 }
    47 int main()
    48 {
    49     while(~scanf("%d%d",&n,&m))
    50     {
    51         int u,v;
    52         cnt = 0;
    53         memset(vis,0,sizeof(vis));
    54         memset(head,-1,sizeof(head));
    55         for (int i = 0; i < m; i ++)
    56         {
    57             scanf("%d%d",&u,&v);
    58             add(u,v);
    59         }
    60         if(bfs(n))
    61             printf("YES
    ");
    62         else
    63             printf("NO
    ");
    64     }
    65     return 0;
    66 }
    View Code
  • 相关阅读:
    2017暑期集训Day 1
    17-06-28模拟赛
    17-06-26模拟赛
    平衡树学习笔记
    指针学习笔记
    17-06-14模拟赛
    17-06-11模拟赛
    17-06-02模拟赛
    17-05-31模拟赛
    培训补坑(day1:最短路&two-sat)
  • 原文地址:https://www.cnblogs.com/lahblogs/p/3262152.html
Copyright © 2020-2023  润新知