Clasificación topológica [algoritmo de aprendizaje]
Prefacio
2023-9-24 15:32:23
El siguiente contenido es de "[Algoritmo de aprendizaje]"
y está destinado únicamente a fines de aprendizaje y comunicación.
derechos de autor
Elimine las siguientes palabras cuando publique en otras plataformas.
Este artículo se publicó por primera vez en la plataforma CSDN.
El autor es CSDN@日星月云.
La página de inicio del blog es https://blog.csdn.net/qq_51625007
. Elimine las siguientes palabras palabras anteriores al publicar en otras plataformas.
recomendar
ninguno
clasificación topológica
Idea principal
Eso es encontrar primero el nodo con grado 0
Eliminar el borde del que se origina
Continuar buscando nodos con grado 0.
Hasta que no puedas encontrarlo
Determinar si quedan nodos
207. Plan de estudios
Solución 1
class Solution {
public boolean canFinish(int numCourses, int[][] prerequisites) {
int n=numCourses;
HashMap<Integer,ArrayList<Integer>> map=new HashMap<>();
for (int i = 0; i < n; i++) {
map.putIfAbsent(i,new ArrayList<>());
}
for(int[] course:prerequisites){
map.get(course[0]).add(course[1]);
}
return topo(map,n);
}
public boolean topo(HashMap<Integer,ArrayList<Integer>> map,int n){
int count=0;
Stack<Integer> stack=new Stack<>();
for (int i = 0; i < n; i++) {
//找到入度为0的点
if (map.get(i).size()==0){
stack.add(i);
}
}
while (!stack.isEmpty()) {
Integer i=stack.pop();
for (int j = 0; j < map.size(); j++) {
if (map.get(j).contains(i)){
map.get(j).remove(i);
if (map.get(j).size()==0){
stack.add(j);
}
}
}
count++;
}
return count == n;
}
}
Solución 2
Un índice matricial en grados
una variable visitada visitada
class Solution {
List<List<Integer>> edges;//有向图
int [] indeg;//入度
public boolean canFinish(int numCourses, int[][] prerequisites) {
edges=new ArrayList<List<Integer>>();
for(int i=0;i<numCourses;i++){
edges.add(new ArrayList<Integer>());
}
indeg=new int[numCourses];
for(int[] info:prerequisites){
edges.get(info[1]).add(info[0]);
indeg[info[0]]++;
}
//拓扑排序
Queue<Integer> queue = new LinkedList<Integer>();
for(int i=0;i<numCourses;i++){
if(indeg[i]==0){
queue.offer(i);
}
}
//广度优先搜索
int visited=0;
while(!queue.isEmpty()){
visited++;
int u=queue.poll();
for(int v:edges.get(u)){
indeg[v]--;
if(indeg[v]==0){
queue.offer(v);
}
}
}
return visited==numCourses;
}
}
por fin
2023-9-24 15:45:02
Todos tenemos un futuro brillante
Les deseo todo lo mejor en sus exámenes de ingreso a posgrado, les deseo todo el éxito
en su trabajo, les deseo a todos lo que desean, me gusta, recopila y sigue.