思路:bfs+状压?
代码:
#include<bits/stdc++.h>
using namespace std;
int g[100][100];
int vis[10000007];
int n,m,k;
vector<int>v[10000];
struct node
{
int ss,step;
};
int bfs()
{
memset(vis,0,sizeof(vis));
queue<node>q;
node tmp,nxt,now;
tmp.ss=0;
tmp.step=0;
q.push(tmp);
vis[tmp.ss]=1;
while(!q.empty())
{
now=q.front();
q.pop();
if(now.ss==(1<<m)-1) return now.step;
for(int i=1;i<=n;i++)
{
int ss=now.ss;
for(int j=0;j<v[i].size();j++)
{
int to=v[i][j];
ss=ss|(1<<to-1);
}
if(!vis[ss])//若该状态未访问,就加入队列
{
q.push( (node) {ss,now.step+1} );
vis[ss]=true;
}
}
}
return -1;
}
int main()
{
n,m,k;cin>>n>>m>>k;
for(int i=1;i<=n;i++)
{
for(int j=0;j<k;j++)
{
int x;cin>>x;
v[i].push_back(x);
}
}
cout<<bfs()<<endl;
}