3243. Distance la plus courte après les requêtes d'ajout de route I
Difficulté :Moyen
Sujets : Tableau, recherche en largeur d'abord, graphique
Vous recevez des requêtes sur un n entier et un tableau d'entiers 2D.
Il y a n villes numérotées de 0 à n - 1. Initialement, il existe une route unidirectionnelle de la ville i à la ville i 1 pour tous 0 <= i < n-1.
queries[i] = [ui, vi] représente l'ajout d'une nouvelle route unidirectionnelle depuis la ville ui à la ville vi. Après chaque requête, vous devez trouver la longueur du chemin le plus court de la ville 0 à la ville n - 1.
Renvoyer une réponse de tableau où pour chaque i dans la plage [0, queries.length - 1], la réponse[i] est la longueur du chemin le plus court de la ville 0 à la ville n - 1 après avoir traité le premieri 1 requêtes.
Exemple 1 :
Exemple 2 :
Contraintes :
Indice :
Solution :
Nous devons simuler l'ajout de routes entre les villes et calculer le chemin le plus court de la ville 0 à la ville n - 1 après chaque ajout de route. Compte tenu des contraintes et de la nature du problème, nous pouvons utiliser la Breadth-First Search (BFS) pour les graphiques non pondérés.
Représentation graphique :
Calcul du chemin le plus court (BFS) :
Itération sur les requêtes :
Efficacité :
Implémentons cette solution en PHP : 3243. Distance la plus courte après les requêtes d'ajout de route I
Explication:
Initialisation du graphique :
- Un graphique de liste de contiguïté est utilisé pour représenter les villes et les routes.
- Au départ, les routes n'existent qu'entre des villes consécutives (i à i 1).
Fonction BFS :
- BFS est utilisé pour calculer la distance la plus courte entre la ville 0 et la ville n - 1. Nous maintenons une file d'attente pour BFS et un tableau de distances pour stocker le nombre minimum de routes (bords) pour atteindre chaque ville.
- Initialement, la distance jusqu'à la ville 0 est définie sur 0, et toutes les autres villes ont une distance infinie (PHP_INT_MAX).
- Au fur et à mesure que nous traitons chaque ville dans la file d'attente BFS, nous mettons à jour les distances de ses villes voisines et continuons jusqu'à ce que toutes les villes accessibles soient visitées.
Traitement des requêtes :
- Pour chaque requête, la nouvelle route est ajoutée au graphique (u -> v).
- BFS est appelé pour calculer le chemin le plus court de la ville 0 à la ville n-1 après la mise à jour.
- Le résultat de BFS est stocké dans le tableau de résultats.
Sortie :
- Le tableau de résultats contient les chemins les plus courts après chaque requête.
Complexité temporelle :
- Chaque BFS prend O(n m), où n est le nombre de villes et m est le nombre de routes. Puisque le nombre de requêtes est q, la complexité temporelle globale est O(q * (n m)), ce qui devrait être efficace pour les contraintes données.
Exemple de procédure pas à pas :
Pour l'entrée n = 5 et les requêtes = [[2, 4], [0, 2], [0, 4]] :
Ainsi, la sortie est [3, 2, 1].
Liens de contact
Si vous avez trouvé cette série utile, pensez à donner une étoile au référentiel sur GitHub ou à partager la publication sur vos réseaux sociaux préférés ?. Votre soutien signifierait beaucoup pour moi !
Si vous souhaitez du contenu plus utile comme celui-ci, n'hésitez pas à me suivre :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!