题目描述
输入
输出
示例输入
2 1
1 2
2 1
2 1 
示例输出
NO
YES
 
提示
 
 
 
 
 #include <stdio.h>
 #include <stdlib.h>
 #include<queue>
 using namespace std;
 typedef struct arcnode
 {
     int adj;
 } arcnode, adjmatrix[1000][1000];
 typedef struct
 {
     adjmatrix a;
     int vn;
     int an;
 } MG;
 int k;//初始点
 int i, j;
 int create(MG &g, int n, int m)//生成邻接矩阵;
 {
     int v1, v2;
     g.vn = n;
     g.an = m;
     for(i=1; i<=g.vn; i++)
         for(j=1; j<=g.vn; j++)
             g.a[i][j].adj = 0;
     for(i=1; i<=g.an; i++)
     {
         scanf("%d %d", &v1, &v2);
         g.a[v1][v2].adj = 1;
     }
     return 1;
 }
 
 
 int v[1000];//标记数组
 int bfs(MG &g)//广度优先遍历;
 {
     queue<int>q;//放在里面 否则超时
     for(i=0; i<=g.vn; i++)//初始化;
         v[i] = 0;
     v[g.vn] = 1;//从尾结点遍历;
     q.push(g.vn);
     while(!q.empty())
     {
         i = q.front();
         q.pop();
         if(i == 1)//到顶点1说明天灾军团能到达1号隘口;
             return 1;
         for(j=1; j<=g.vn; j++)
         {
             if(g.a[i][j].adj == 1 && !v[j])
             {
                 v[j] = 1;
                 q.push(j);
             }
         }
     }
     return 0;
 }
 int main()
 {
     MG g;
     int n, m;
     while(~scanf("%d %d", &n, &m))//主函数里输入 否则超时
     {
         create(g, n, m);
         bfs(g);
         if(!bfs(g))
             printf("NO\n");
         else
             printf("YES\n");
     }
     return 0;
 }