求条!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
查看原帖
求条!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
526470
zhuyuhao1123楼主2025/6/29 09:58
#include<bits/stdc++.h>
using namespace std;
int n,m,ans=0x7f7f7f;
int a[105][15],e[1024][1024],b[1024];
struct edge
{
	int num,k;
}t;
queue<edge>q;
void bfs()
{
	while(!q.empty()) q.pop();
	t.num=1024,t.k=0;
	q.push(t);
	while(!q.empty())
	{
		t=q.front();
		q.pop();
		b[t.num]=1;
		if(t.num==0)
		{
			ans=min(ans,t.k);
			continue;
		}
		for(int i=0;i<=1024;++i)
		if(e[t.num][i]==1&&b[i]==0) q.push((edge){i,t.k+1});
	}
}
int main()
{
	cin>>n>>m;
	memset(e,0x7f7f7f7f,sizeof(e));
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j) cin>>a[i][j];
		for(int j=1;j<=m;++j)
		for(int k=0;k<=1024;++k)
		if(a[i][j]==1&&k&(1<<j)==0) e[k+(1<<j)][k]=1;
		else if(a[i][j]==-1&&k&(1<<j)==1) e[k][k-(1<<j)]=1;
	}
	if(ans==0x7f7f7f) cout<<"-1\n";
	else cout<<ans<<"\n";
	return 0;
}
2025/6/29 09:58
加载中...