状态压缩 bfs
感觉可以用图论做,但是基本忘掉了。
看了一眼,别人的题解。
因为存储所有节点可达的问题,所以不用状态压缩的话,就要用多维数组表示结果。
感觉还是有些问题。
package pro847;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
/**
* @Author: qiqu
*/
public class Solution {
public int shortestPathLength(int[][] graph) {
int length = graph.length;
int[][] dest = new int[1<<length][length];
for(int[] arrays : dest) {
Arrays.fill(arrays, Integer.MAX_VALUE);
}
Queue<State> queue = new LinkedList<>();
for(int i=0;i<length;i++){
queue.offer(new State(1 << i, i));
dest[1<<i][i]=0;
}
while(!queue.isEmpty()){
State state = queue.poll();
if(state.cover == (1<<length) -1) {
return dest[state.cover][state.node];
}
for(int to : graph[state.node]){
int cur = state.cover | (1<< to);
if(dest[cur][to] > dest[state.cover][state.node] + 1){
dest[cur][to] = dest[state.cover][state.node] + 1;
queue.offer(new State(cur, to));
}
}
}
return 1;
}
public class State{
int cover;
int node;
State(int cover,int node){
this.cover = cover;
this.node = node;
}
}
}