SWUST DO 1069: Implementación en C++ de la búsqueda de gráficos en amplitud en el orden de entrada

Tema Descripción

La búsqueda en anchura del gráfico es similar al recorrido jerárquico del árbol, es decir, a partir de un cierto nodo, primero visite el nodo, luego visite todos los puntos adyacentes del nodo y luego visite los puntos adyacentes de cada uno. punto adyacente a su vez. Proceda de esta manera hasta que se visiten todos los nodos. En esta pregunta, se supone que todos los nodos están representados por varios caracteres en "A"--"Z", y se requiere acceder al orden de acceso de los nodos de acuerdo con el orden de entrada. Si el orden de entrada del nodo es HUEAK, se requiere una búsqueda en anchura comenzando desde H, y los posibles resultados de la búsqueda son: H->E->A->U->K.

ingresar

La primera línea es un número entero n, que indica el número de vértices, la segunda línea es una cadena de n letras mayúsculas, que indica los vértices, y la siguiente línea es una matriz entera de tamaño n*n, que indica la relación de adyacencia del gráfico . Un número de 0 indica que no hay adyacencia, de lo contrario es la longitud del lado correspondiente. La última línea es un carácter que indica el vértice inicial para el que se requiere la búsqueda en anchura.

producción

Muestra el resultado de la búsqueda en anchura en una línea, comenzando desde el vértice dado.
#include<bits/stdc++.h>
using namespace std;
int n, x, a[1005];
char s[105], ch;
vector<char>v[105];
void dfs(char x){
	queue<char>q;
	q.push(x);
	while(q.size()){
		char y = q.front();
		cout<<y;
		q.pop();
		for(auto i:v[y]){
			if(a[i]) continue;
			a[i]++;
			q.push(i);
		}
	}
}
int main(){
	cin>>n>>s;
	for(int i = 0; i < n; i++){
		for(int j = 0; j < n; j++){
			cin>>x;
			if(x) v[s[i]].push_back(s[j]);
		}
	}
	cin>>ch;
	a[ch]++;
	dfs(ch);
	return 0;
}

 

Supongo que te gusta

Origin blog.csdn.net/Ljy_Cxy/article/details/131471729
Recomendado
Clasificación