Red de conocimiento informático - Conocimiento del nombre de dominio - Código fuente de estructura de datos públicos

Código fuente de estructura de datos públicos

Pintura

Código fuente:

/*

La pequeña L vive en muchas ciudades. ...

Autor: q839219286

Idea de algoritmo: el mapa de la ciudad utiliza la búsqueda DFS y la condición de finalización de la búsqueda es: ¿llegar al punto final o? ¿Configuración Vmax-Vmin>dV

? DV=Vmax-Vmin, ¿cuál es el método para encontrar DV? El historial recursivo de Vmax y Vmin

La estructura del gráfico utiliza el método de lista de adyacencia y la estructura de almacenamiento utiliza una matriz.

*/

//Versión en lenguaje C

# incluir ltstdio.h gt

# incluir ltstdlib.h gt

#¿Contiene? lt restricción. gt

//Función de definición de macro

#Definición? MÁXIMO(a,b)? (a)>(b)? (a): (b)

#¿Definición? MÍN(a,b)? (1)lt(b)? (a): (b)

//Estructura de nodo gráfico (método de lista de adyacencia)

struct? ¿Nodo V? {

estructura? ¿borde? *Siguiente;

¿Ciel? Visitado; // Si ha sido visitado en esta ruta, = 1 Sí = 0 No.

};

//La estructura de borde del gráfico (método de lista de adyacencia)

struct? ¿borde? {

int? Cinco; //Velocidad de la carretera

estructura? ¿Nodo V? * adjVex//El nodo de la ciudad al que conduce la carretera.

estructura? ¿borde? *Siguiente;

};

#¿Definición? max_Vex? 500

#¿Definición? max_Edge? 5000

//Hasta 500 ciudades (no use el subíndice 0)

struct? ¿Nodo V? Vex【max_Vex? ?1];

estructura? ¿borde? Borde[max_Edge? *?2]; //Un borde tiene dos nodos para registrar.

int? vex_Núm? Número de aristas;

estructura? ¿Nodo V? *comenzar,? *Fin; //Punto inicial y final

int? minDIF//La diferencia mínima entre Vmax-Min en la ruta hacia el destino que se ha encontrado.

¿Anulado? addEdge(int? Ui, ? int? VI, ? int? wi); //Agregar? ¿Ui? ¿A dónde ir? El camino de Wei

¿Evitado? construir gráfico();

¿No es válido? DFS(struct?VNode?*vex?int?Vmax?int?vmin);

int? principal()? {

int? q;scanf("d", ampq); //Un número entero q que indica cuántos conjuntos de datos de prueba hay.

int? Fuera [5], yo; //2≤Q≤5

¿Para qué? (I = 0;?i ltq?;?i)? {

construir gráfico(); // Ya contiene scanf.

DFS(start,-1,?INT_MAX-1);

¿Fuera de [I]? =?minDIF

}

//Emitir el resultado final

¿Para qué? (I?=?0;?I ltq;?i)? {

printf("d\n ",out[i]?);

}

//getchar();? getchar(); //¿Prevenir flashback

¿Regresión? 0;

}

¿No es válido? ¿DFS(estructura? ¿VNode? *vex, int? ¿Vmax internacional? ¿Vmin)? {

¿Y si? (Vmax?-?Vmin? gt=?minDIF) regresa; //Una vez que se excede el límite, no tiene sentido continuar atravesando.

¿Y si? (¿enfadado?==?fin)? {//Llegó al final

Mindiv? =?Vmáx? -?Vmin//¿Estás de acuerdo? ¿Vmáx? -?Vmín? ¿Es? Mindiff

} ¿Algo más? {//Continuar atravesando

vex->; ¿Has visitado? =?1; //Evitar el bucle infinito DFS

struct? ¿borde? *Siguiente;

¿Para qué? (¿Siguiente?=?vex->Siguiente;

¿Siguiente?!=?NULL?Siguiente?=?Siguiente-gt;Siguiente)? {

if(0==? next-gt; adj vex- gt; visitado) //El siguiente nodo no se encuentra entre los nodos pasados.

DFS(siguiente->adjVex?MAX(siguiente->v,?Vmax),?MIN(siguiente->v,?vmin));

}

vex->;¿Has visitado? =?0;//Regreso al pasado

}

}

//¿Agregar? ¿Ui? ¿A dónde ir? El camino de Wei

¿Evitado? addEdge(int? Ui, ? int? VI, ? int? Wi)? {

Borde [número de borde]. adjVex? =? molesto? ? Seis;

Borde [número de borde]. v? =?wi;

Borde [número de borde]. ¿Próximo? =?vex[Ui]. Next; //Método de inserción del encabezado de la lista vinculada

vex[Ui]. ¿Próximo? =?borde? Número de aristas;

edge _ num;

}

¿No es válido? construirGraph()? {

int? ¿Número de carretera? I,? ID de inicio,? endID

estructura? ¿Nodo V? * p _ V;

scanf("d? d ", ampvex_Num? amproad _ Num);

//Inicializa el nodo. Recorra en orden inverso, tenga en cuenta que vex [0] no se cuenta. De hecho, se puede eliminar con memset(). Escribí la versión del código nativo.

¿Para qué? (p_V?=?vex? ?vex _ Num?p_V? gt?vex?p_V -)? {

p _ V- gt;¿Siguiente? =?NULL

p _ V- gt;¿Visitado? =?0;

}

//Atención? Carretera_Núm carretera? ¿Qué pasa? 2*edge_Num? ¿Borde de la tabla adyacente

número_borde? =?0;

¿Para qué? (;? Núm_carretera? gt? 0;? Núm_carretera -)? {//carretera_núm carreteras? Lea los datos de la fila road_Num.

int? Ui,? seis,? wi; //3 enteros Ui, Vi, Wi,? (I = 1,...,m), los dos números de ciudad de la vía y la velocidad de conducción de la vía.

scanf("d?d?d", ampUi,? amp6,? ampwi);

//Tenga en cuenta que se deben agregar ambas direcciones.

addEdge(Ui, VI, ?wi);

addEdge(Vi, Ui, ?wi); /Asignación de datos restantes

scanf("d?d", ampstartID,? ampendID);

¿Iniciar? =? molesto? ?startID

¿Fin? =? molesto? ?endID

Mindiff? =?INT_MAX

}