Paseo óptimo (mapa, camino más corto)

Título

Dadas varias paradas y rutas de un solo sentido, solicite al menos algunas transferencias desde el punto de inicio al punto final.

Ideas

El número de transferencias se puede convertir en el número de viajes, menos 1. En la misma ruta, cualquier estación de esta ruta puede seguir la dirección de la ruta hasta la siguiente estación. Por lo tanto, podemos construir un gráfico como este y construir un gráfico dirigido. Si un punto puede llegar a otro punto pasando un automóvil solo una vez, entonces estará conectado a un borde, y si no puede ser alcanzado por un automóvil, entonces no estará conectado. De esta manera, el problema se transforma en el problema del camino más corto desde el principio hasta el final.

Código

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <sstream>

using namespace std;

const int N = 510;

int n,m;
int g[N][N];
int dist[N];
int stop[N];

int main()
{
    
    
    cin >> m >> n;
    memset(g,0x3f,sizeof(g));
    for(int i=1;i<=n;i++) g[i][i] = 0;
    string line;
    getline(cin,line);
    while(m--){
    
    
        getline(cin,line);
        stringstream ssin(line);
        int p, cnt = 0;
        while(ssin>>p) stop[cnt++] = p;
        for(int i=0;i<cnt;i++){
    
    
            for(int j=i+1;j<cnt;j++){
    
    
                g[stop[i]][stop[j]] = 1;
            }
        }
    }
    memset(dist,0x3f,sizeof(dist));
    queue<int> que;
    dist[1] = 0;
    que.push(1);
    while(que.size()){
    
    
        int t = que.front();
        que.pop();
        for(int i=1;i<=n;i++){
    
    
            if(dist[i]>dist[t]+g[t][i]){
    
    
                dist[i] = dist[t] + g[t][i];
                que.push(i);
            }
        }
    }
    if(dist[n]==0x3f3f3f3f) cout << "NO" << endl;
    else cout << max(dist[n]-1,0) << endl;
    return 0;
}

recompensa

  • Al construir un mapa, no es necesario construir una hoja de ruta real, sino abstraer basándose en problemas reales.
  • Para la entrada de esta pregunta, una ruta pasa por varias estaciones, pero no se proporciona el número de estaciones. Por lo tanto, puede considerar el uso de un método de entrada especial.

Supongo que te gusta

Origin blog.csdn.net/weixin_43634220/article/details/108589926
Recomendado
Clasificación