题目
假如这是树,就好了,可以直接 树形dp。与树形背包dp 吃苹果和 让机器人去走很像。
可惜这只是一个普通的联通图而已。
class Solution {
public:
int vis[1<<13][13];
struct node{
int sta,x,step;
};
int shortestPathLength(vector<vector<int>>& graph) {
int n=graph.size();
queue<node>q;
for(int i=0;i<n;++i) q.push((node){1<<i,i,0}),vis[0][i]=1;//访问节点的状态为0,当前在i节点
int ans=(1<<n)-1;
while(!q.empty()){
node cur=q.front();q.pop();
int sta=cur.sta,x=cur.x,step=cur.step;
if(sta==ans) return step;
for(int j=0;j<graph[x].size();++j){
int y=graph[x][j];
int nexsta=(sta|(1<<y));
if(!vis[nexsta][y]) vis[nexsta][y]=1,q.push((node){nexsta,y,step+1});
}
}
return -1;
}
};