G - los datos experimentales sobre la estructura de la figura cinco: número mínimo (BFS) desde el punto de partida de la etapa de punto de destino

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;
}


Publicados 177 artículos originales · ganado elogios 7 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/Fusheng_Yizhao/article/details/104883716
Recomendado
Clasificación