Descripción
En la antigua leyenda de Warcraft, hay dos cuerpos, llamados un desastre natural, un hombre llamado guardias. En el área donde se encuentran, hay n Pass, numeradas 1 ... n, algunos de los pasos entre los canales está conectado. En donde Sentinel Pass No. 1, No. n Pass el flagelo. Un día, el líder de la Lich King Plaga decidió enviar tropas a atacar el Sentinel, azote de una fuerza tan grande, y hasta llenar el río a través del río. Pero el Lich King no quiere pagar costos innecesarios, lo que quería saber, bajo la premisa no construye cualquier canal, ya sea para atacar a las tropas pueden llegar en Sentinel Pass y su canal asociado, si es posible, un número mínimo de canales para ir a través. Debido a la relativamente grande valor de n (n <= 1000), entonces el Rey Lich encontró una buena programación = _ = usted, usted le ayuda a resolver este problema, de lo contrario va a comer se convierte en su magia. Con el fin de salvarse a sí mismo, y rápidamente pensar en formas de TI.
Entrada
De entrada que comprende una pluralidad de conjuntos, cada formato.
La primera línea contiene dos números enteros n, m (n representan un Pass, entre los canales hay m Pass).
Las siguientes líneas M contiene dos enteros a, b; representa una desviación de b tiene un paso hacia el paso (nota: el canal es unidireccional).
Salida
Si la Plaga no puede construir cualquier canal para alcanzar el No. 1 Pass, entonces la salida del número mínimo de canales a través, de lo contrario la salida NO.
Muestra
Entrada
2 1
1 2
2 1
2 1
Output
NO
1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<malloc.h>
#include<queue>
using namespace std;
int Map[1100][1100],vis[1100];
int n,m;
struct node
{
int step;
int data;
}t,k;
int flag;
void bfs(int x)
{
queue<node>q;
vis[x] = 1;
t.data = x;
t.step = 0;
q.push(t);
while(!q.empty())
{
k = q.front();
q.pop();
if(k.data == 1)
{
flag = 1;
printf("%d\n",k.step);
return ;
}
for(int i=1;i<=n;i++)
{
if(!vis[i]&&Map[k.data][i])
{
vis[i] = 1;
t.data = i;
t.step = k.step+1;
q.push(t);
}
}
}
}
int main()
{
int u,v;
while(~scanf("%d %d",&n,&m))
{
memset(vis,0,sizeof(vis));
memset(Map,0,sizeof(Map));
flag = 0;
for(int i=0;i<m;i++)
{
scanf("%d %d",&u,&v);
Map[u][v] = 1;
}
bfs(n);
if(flag==0)
printf("NO\n");
}
return 0;
}