Table des matières
Méthode à utiliser
Approche axée sur la largeur d'abord
Algorithme
Exemple
Sortie
Conclusion
Maison développement back-end C++ La recherche en largeur n'utilise pas de files d'attente

La recherche en largeur n'utilise pas de files d'attente

Sep 16, 2023 pm 09:57 PM
搜索 Non utilisé la largeur d'abord

La recherche en largeur nutilise pas de files dattente

Breadth First, Look (BFS) est un calcul de traversée de graphique utilisé pour étudier le centre en mouvement en largeur dans un graphique. L'utilisation normale de BFS utilise la structure d'informations de ligne pour suivre les hubs entrants. Quoi qu’il en soit, il est concevable d’exploiter d’autres structures d’informations pour effectuer des BFS sans utiliser de câbles explicites.

Une autre façon d'implémenter BFS sans câbles consiste à utiliser deux clusters ou enregistrements : un pour le hub du niveau actuel étudié et un pour le hub du niveau suivant à étudier. Initialement, la liste de niveaux actuelle contient le centre source.

Le calcul met d'abord en évidence la liste de niveaux actuelle et va à chaque hub. Pour chaque hub traversé, ses hubs adjacents sont inspectés. Si un hub adjacent n'est pas visité, il est marqué comme visité et ajouté à la liste des autres niveaux. Le handle continuera jusqu'à ce que tous les hubs de la liste de niveaux actuelle aient été transmis.

Une fois la liste de niveaux actuelle entièrement parcourue, le calcul continue vers une autre liste de niveaux et hache à nouveau le chemin vers le hub et accède à la liste de niveaux suivante. Cette préparation se poursuit jusqu'à ce qu'il n'y ait plus de nœuds non visités.

Méthode à utiliser

Approche axée sur la largeur d'abord

Approche axée sur la largeur d'abord

L'algorithme BFS part du hub source, étudie ses voisins et est plus récemment passé à un autre niveau de voisins. Utilisez la structure d’informations de ligne pour suivre les hubs que vous visitez. À chaque cycle, le calcul visite un hub, le marque comme terminé et met en file d'attente les hubs adjacents non visités. Cette préparation se poursuivra jusqu'à ce que tous les centres accessibles aient été visités.

Le code initialise un vecteur adj pour représenter la liste infectieuse du graphique. Chaque fichier de vecteurs est comparé à un centre et chaque valeur enregistrée contient des centres adjacents. Un parcours BFS est effectué par une tâche BFS, qui prend le hub source, le nombre de hubs N, le vecteur vis passant par le hub, un dp séparé et le vecteur v utilisé pour garder une trace des hubs à visiter. Le travail bfsTraversal initialise le hub disparu et supprime les vecteurs, puis appelle le travail BFS pour effectuer le parcours.

Algorithme

  • Créez une représentation de liste d'infections du graphique.

  • Initialisez une ligne pour stocker le hub auquel accéder.

  • Initialisez le cluster en voie de disparition pour suivre les nœuds qui disparaissent.

  • Initialisez le cluster de suppression pour stocker le contenu supprimé du hub source sur chaque hub. Définissez le délimiteur du hub source sur 0.

  • Mettez le hub source en file d'attente et vérifiez s'il a été consulté.

  • Bien que le pipeline ne puisse pas être purifié, veuillez procéder comme suit :

  • Supprimez le hub en tête de file d'attente. Pour chaque hub voisin qui a été retiré de la file d'attente et non encore traversé, procédez comme suit : Mettez le hub voisin en file d'attente. Marquez les hubs adjacents comme visités. Suppression du hub voisin mis à jour pour supprimer la suppression du hub de la file d'attente (également 1).

  • Répétez l'étape 6 jusqu'à ce que la ligne soit vide.

  • Une fois le parcours BFS terminé, un cluster distinct contiendra les intervalles allant du nœud source à tous les autres centres du graphique.

  • (Facultatif) Vous pouvez également suivre le hub parent de chaque hub dans une traversée BFS pour passer du hub source à tous les autres hubs de la manière la plus simple.

Exemple

#include <iostream>
#include <queue>
#include <unordered_set>
using namespace std;

void bfsTraversal(int adjacencyList[][2], int numVertices, int source) {
   bool visited[numVertices + 1] = {false};
   int distances[numVertices + 1] = {0};

   queue<int> vertices;
   vertices.push(source);
   visited[source] = true;

   while (!vertices.empty()) {
      int node = vertices.front();
      cout << node << ", ";
      vertices.pop();

      for (int i = 0; i < 2; i++) {
         int next = adjacencyList[node][i];
            
         if (!visited[next]) {
            vertices.push(next);
            distances[next] = distances[node] + 1;
            visited[next] = true;
         }
      }
   }
}

int main() {
    int adjacencyList[][2] = {{0, 0}, {1, 2}, {3, 4}, {0, 0}, {0, 0}};
    int numVertices = 4;
    int source = 2;

    bfsTraversal(adjacencyList, numVertices, source);

    return 0;
}
Copier après la connexion

Sortie

2,3,4,0
Copier après la connexion

Exemple

#include <iostream>
#include <vector>
using namespace std;

void bfsTraversal(vector<vector<int>>& adjacencyList, int N, int source) {
    vector<bool> visited(N + 1, false);
    vector<int> distances(N + 1, 0);
    vector<int> vertices;

    vertices.push_back(source);
    visited[source] = true;

    int curr = 0;
    while (curr < vertices.size()) {
        int node = vertices[curr];
        cout << node << ", ";

        for (int i = 0; i < adjacencyList[node].size(); i++) {
            int next = adjacencyList[node][i];

            if (!visited[next]) {
                vertices.push_back(next);
                distances[next] = distances[node] + 1;
                visited[next] = true;
            }
        }

        curr++;
    }

    cout << "\nDistances from source " << source << ":\n";
    for (int i = 1; i <= N; i++) {
        cout << "Node " << i << ": " << distances[i] << endl;
    }
}

int main() {
    int N = 8;
    vector<vector<int>> adjacencyList(N + 1);
    adjacencyList[0] = {1, 2};
    adjacencyList[1] = {2};
    adjacencyList[2] = {0, 3};
    adjacencyList[3] = {3};
    adjacencyList[4] = {5};
    adjacencyList[5] = {6, 7};
    adjacencyList[6] = {};
    adjacencyList[7] = {};
    adjacencyList[8] = {};

    int source = 5;

    bfsTraversal(adjacencyList, N, source);

    return 0;
}
Copier après la connexion

Sortie

5, 6, 7, 
Distances from source 5:
Node 1: 0
Node 2: 0
Node 3: 0
Node 4: 0
Node 5: 0
Node 6: 1
Node 7: 1
Node 8: 0
Copier après la connexion

Conclusion

Cet article explique les calculs de recherche en largeur d'abord (BFS) sans utiliser de structures d'informations sur les lignes. Les calculs BFS sont généralement utilisés pour parcourir un graphique étape par étape à partir d'un centre source donné. En règle générale, un itinéraire est utilisé pour stocker les hubs vers lesquels voyager. Quoi qu’il en soit, cet article examine une approche alternative qui utilise des listes ou des clusters de base pour stocker le niveau suivant de hubs.

Cette utilisation sélective complète l'étude en profondeur des graphiques. Cet article retrace les étapes du calcul BFS, telles que l'initialisation des enregistrements infectieux, la gestion des clusters de référence et de séparation et l'utilisation de cercles pour mettre l'accent sur les niveaux centraux. Il fournit également des instructions en code C illustrant le parcours BFS sans utiliser une seule ligne. Le code étudie avec précision le graphique, imprime la permutation de traversée BFS et calcule la distance entre le hub source et tous les autres nœuds. Dans l'ensemble, cet article fournit une explication claire et une utilisation réalisable des calculs BFS sans utiliser de lignes, démontrant une approche alternative pour naviguer dans les graphiques en largeur.

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment supprimer le contenu d'actualités et de tendances de la recherche Windows 11 Comment supprimer le contenu d'actualités et de tendances de la recherche Windows 11 Oct 16, 2023 pm 08:13 PM

Lorsque vous cliquez sur le champ de recherche dans Windows 11, l'interface de recherche se développe automatiquement. Il affiche une liste des programmes récents à gauche et du contenu Web à droite. Microsoft y affiche des actualités et du contenu tendance. Le chèque d'aujourd'hui fait la promotion de la nouvelle fonctionnalité de génération d'images DALL-E3 de Bing, de l'offre « Chat Dragons with Bing », de plus d'informations sur les dragons, des principales actualités de la section Web, des recommandations de jeux et de la section Recherche de tendances. La liste complète des éléments est indépendante de votre activité sur votre ordinateur. Bien que certains utilisateurs puissent apprécier la possibilité de consulter les actualités, tout cela est abondamment disponible ailleurs. D'autres peuvent directement ou indirectement le classer comme promotion ou même publicité. Microsoft utilise des interfaces pour promouvoir son propre contenu,

Comment rechercher des utilisateurs à Xianyu Comment rechercher des utilisateurs à Xianyu Feb 24, 2024 am 11:25 AM

Comment Xianyu recherche-t-il des utilisateurs ? Dans le logiciel Xianyu, nous pouvons trouver directement les utilisateurs avec lesquels nous souhaitons communiquer dans le logiciel. Mais je ne sais pas comment rechercher des utilisateurs. Visualisez-le simplement parmi les utilisateurs après la recherche. Vient ensuite l'introduction que l'éditeur propose aux utilisateurs sur la façon de rechercher des utilisateurs. Si vous êtes intéressé, venez jeter un œil ! Comment rechercher des utilisateurs dans Xianyu ? Réponse : Afficher les détails parmi les utilisateurs recherchés Introduction : 1. Entrez le logiciel et cliquez sur la zone de recherche. 2. Entrez le nom d'utilisateur et cliquez sur Rechercher. 3. Sélectionnez ensuite [Utilisateur] sous la zone de recherche pour trouver l'utilisateur correspondant.

Comment utiliser la recherche avancée Baidu Comment utiliser la recherche avancée Baidu Feb 22, 2024 am 11:09 AM

Comment utiliser la recherche avancée Baidu Le moteur de recherche Baidu est actuellement l'un des moteurs de recherche les plus utilisés en Chine. Il offre une multitude de fonctions de recherche, dont la recherche avancée. La recherche avancée peut aider les utilisateurs à rechercher les informations dont ils ont besoin avec plus de précision et à améliorer l'efficacité de la recherche. Alors, comment utiliser la recherche avancée Baidu ? La première étape consiste à ouvrir la page d’accueil du moteur de recherche Baidu. Tout d’abord, nous devons ouvrir le site officiel de Baidu, qui est www.baidu.com. C'est l'entrée de la recherche Baidu. Dans la deuxième étape, cliquez sur le bouton Recherche avancée. Sur le côté droit du champ de recherche Baidu, il y a

La table WPS ne trouve pas les données que vous recherchez, veuillez vérifier l'emplacement de l'option de recherche La table WPS ne trouve pas les données que vous recherchez, veuillez vérifier l'emplacement de l'option de recherche Mar 19, 2024 pm 10:13 PM

À l'ère dominée par l'intelligence, les logiciels de bureautique sont également devenus populaires et les formulaires Wps sont adoptés par la majorité des employés de bureau en raison de leur flexibilité. Au travail, nous devons non seulement apprendre à créer des formulaires simples et à saisir du texte, mais également à maîtriser des compétences plus opérationnelles afin d'accomplir les tâches du travail réel. Les rapports contenant des données et l'utilisation de formulaires sont plus pratiques, clairs et précis. La leçon que nous vous apportons aujourd'hui est la suivante : la table WPS ne trouve pas les données que vous recherchez. Pourquoi veuillez vérifier l'emplacement de l'option de recherche ? 1. Sélectionnez d'abord le tableau Excel et double-cliquez pour l'ouvrir. Ensuite dans cette interface, sélectionnez toutes les cellules. 2. Ensuite, dans cette interface, cliquez sur l'option « Modifier » dans « Fichier » dans la barre d'outils supérieure. 3. Deuxièmement, dans cette interface, cliquez sur «

Comment rechercher un répertoire avec une extension de fichier spécifique en Java ? Comment rechercher un répertoire avec une extension de fichier spécifique en Java ? Aug 31, 2023 am 08:13 AM

L'exemple suivant imprime les fichiers dans un répertoire en fonction de leur extension - Exemple importjava.io.IOException;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.stream. Stream ; publicclassDemo{ publicstaticvoidmain(String[]args)throwsIOException{&nbsp

Comment rechercher des magasins sur mobile Taobao Comment rechercher des noms de magasins Comment rechercher des magasins sur mobile Taobao Comment rechercher des noms de magasins Mar 13, 2024 am 11:00 AM

Le logiciel de l'application mobile Taobao propose de nombreux bons produits. Vous pouvez les acheter à tout moment et n'importe où, et tout est authentique. Il n'y a aucune opération compliquée, ce qui vous permet de faire des achats plus pratiques. Vous pouvez rechercher et acheter librement à votre guise. Les sections de produits des différentes catégories sont toutes ouvertes. Ajoutez votre adresse de livraison personnelle et votre numéro de contact pour permettre à l'entreprise de messagerie de vous contacter, et vérifiez les dernières tendances logistiques en temps réel. les utilisateurs l'utilisent pour la première fois. Si vous ne savez pas comment rechercher des produits, il vous suffit bien sûr de saisir des mots-clés dans la barre de recherche pour trouver tous les résultats des produits. Vous ne pouvez pas arrêter d'acheter librement. L'éditeur fournira des méthodes en ligne détaillées permettant aux utilisateurs mobiles de Taobao de rechercher des noms de magasins. 1. Ouvrez d'abord l'application Taobao sur votre téléphone mobile,

Comment utiliser les fonctions PHP pour rechercher et filtrer des données ? Comment utiliser les fonctions PHP pour rechercher et filtrer des données ? Jul 24, 2023 am 08:01 AM

Comment utiliser les fonctions PHP pour rechercher et filtrer des données ? Dans le processus de développement avec PHP, il est souvent nécessaire de rechercher et de filtrer les données. PHP fournit une multitude de fonctions et de méthodes pour nous aider à réaliser ces opérations. Cet article présentera certaines fonctions et techniques PHP couramment utilisées pour vous aider à rechercher et filtrer efficacement les données. Recherche de chaîne Les fonctions de recherche de chaîne couramment utilisées en PHP sont strpos() et strstr(). strpos() est utilisé pour trouver la position d'une certaine sous-chaîne dans une chaîne. Si elle existe, elle renvoie.

Comment utiliser l'algorithme de recherche de hachage en C++ Comment utiliser l'algorithme de recherche de hachage en C++ Sep 19, 2023 pm 02:49 PM

Comment utiliser l'algorithme de recherche de hachage en C++ L'algorithme de recherche de hachage est une technologie de recherche et de stockage efficace. Il convertit les mots-clés en un index de longueur fixe via une fonction de hachage, puis utilise cet index dans la structure de données Search. En C++, nous pouvons implémenter des algorithmes de recherche de hachage en utilisant des conteneurs de hachage et des fonctions de hachage de la bibliothèque standard. Cet article explique comment utiliser l'algorithme de recherche de hachage en C++ et fournit des exemples de code spécifiques. Présentation des fichiers d'en-tête et des espaces de noms Tout d'abord, avant d'utiliser l'algorithme de recherche de hachage en C++

See all articles