状压+bfs求助悬关
查看原帖
状压+bfs求助悬关
626005
zhr2021楼主2023/11/27 16:59
#include<bits/stdc++.h>
#define L long long
using namespace std;
const L N=5145,mod=1e8;
L n,m,sw[114][14],vis[N];
queue<L> que;
L change(L s,L x){
	for(L i=1;i<=n;i++){
		if(sw[x][i]== 1&&(s&(1<<(i-1)))==(1<<(i-1))) s^=(1<<(i-1));
		if(sw[x][i]==-1&&(s&(1<<(i-1)))==0) s^=(1<<(i-1));
	}
	return s;
}
int main(){
	scanf("%lld%lld",&n,&m);
	for(L i=1;i<=m;i++){
		for(L j=1;j<=n;j++){
			scanf("%lld",&sw[i][j]);
		}
	}
	vis[(1<<n)-1]=1;
	que.push((1<<n)-1);
	while(!que.empty()){
		L s=que.front();
		que.pop();
		for(L i=1;i<=m;i++){
			if(s==0){
				cout<<vis[s];
				return 0;
			}
			L s1=change(s,i);
			//cout<<s1<<' ';
			if(vis[s1]==0){
				vis[s1]=vis[s]+1;
				que.push(s1);
			}
		}
	}
	cout<<"-1";
	return 0;
}
2023/11/27 16:59
加载中...