Edición de la Universidad de Zhejiang "Estructura de datos (segunda edición)" colección de temas-ejemplo 6.1

Ejemplo 6.1 Espacio de seis dimensiones (30 punto (s))

La teoría de los "Seis grados de separación" también se denomina teoría de los "Seis grados de separación". Esta teoría puede expresarse fácilmente como: "No hay más de seis personas entre tú y un extraño. Es decir, puedes conocer a cualquier extraño a través de un máximo de cinco personas". Como se muestra en la Figura 1..

Ejemplo:

#include <iostream>
#include <iomanip>
#include <vector>
#include <deque>

using namespace std;

#define MaxVertexNum  1008
typedef int WeightType;
typedef int Vertex;
typedef struct GNode *PtrToGNode;
struct GNode {
    int Nv;
    int Ne;
    WeightType G[MaxVertexNum][MaxVertexNum];
};
typedef PtrToGNode Graph;

Graph ReadG()
{
    Graph G = new GNode;
    cin >> G->Nv >> G->Ne;
    for(int i = 0; i < G->Ne; i++) {
        int s, d;
        cin >> s >> d;
        G->G[s][d] = 1;
        G->G[d][s] = 1;
    }
    return G;
}

deque<Vertex> queue(MaxVertexNum);

double SixDegree(Graph G, Vertex i)
{
    vector<bool> Visited(G->Nv);
    vector<int>  Dist(G->Nv);
    Visited[i] = true;
    Dist[i] = 0;
    queue.push_back(i);
    while(!queue.empty()) {
        i = queue.front();
        queue.pop_front();
        for(Vertex k = 1; k <= G->Nv; k++) {
            if(G->G[i][k] && !Visited[k]) {
                Visited[k] = true;
                Dist[k] = Dist[i]+1;
                if(Dist[k] < 6) queue.push_back(k);
            }
        }
    }
    int cnt = 0;
    for(Vertex k = 1; k <= G->Nv; k++) {
        if(Visited[k]) cnt++;
    }
    return (double)cnt/G->Nv * 100;
}

int main()
{
    Graph G = ReadG();
    for(Vertex i = 1; i <= G->Nv; i++) {
        cout << i << ": " << scientific << fixed << setprecision(2) << SixDegree(G, i) << '%' << endl;
    }
    return 0;
}

Ideas:

El BFS del gráfico no dirigido usa Dist para registrar la distancia. Cuando la distancia es igual a 6, no es necesario unirse al equipo. Finalmente, el número en Visited es el vértice que cumple con los requisitos.

Supongo que te gusta

Origin blog.csdn.net/u012571715/article/details/113355045
Recomendado
Clasificación