求调,帮忙找找逻辑问题。对于一些数据输出正确,但一些数据输出错误
查看原帖
求调,帮忙找找逻辑问题。对于一些数据输出正确,但一些数据输出错误
1533737
null___楼主2025/1/27 15:32
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[26],v[26],dx[5]={0,-1,0,1,0},dy[5]={0,0,1,0,-1};
char p[6][6],m[7][7];int ans[510];
ll minn=99999,flag=0;
int  check(ll a[],ll t){
	for(int i=1;i<=t;i++){
		ll x=ceil(a[i]/5.0),y=a[i]%5==0?5:a[i]%5;
		for(int j=0;j<=4;j++){
			ll tx=x+dx[j],ty=y+dy[j];
			if(m[tx][ty]!='2'){
				m[tx][ty]=!(m[tx][ty]-48)+48;
			}
		}
   }
   for(int i=1;i<=5;i++){
		for(int j=1;j<=5;j++){
			if(m[i][j]=='0')return 0;
		}
	}
	return 1;
}

void dfs(ll k){
	if(check(a,k-1)){
		minn=k-1;
		flag=1;
		return;
	}
	if(k>6)return;
	for(ll i=1;i<=5;i++)
	for(ll j=1;j<=5;j++)m[i][j]=p[i][j];
	for(ll i=1;i<=25;i++){
		if(v[i]==0&&i>a[k-1]){
			v[i]=1;
			a[k]=i;
			dfs(k+1);
			if(flag)return;
			v[i]=0;
			a[k]=0;
		}
	}
}

int main(){
	ll n;
	cin>>n;fflush(stdin);
	for(int i=0;i<=7;i++)
	for(int j=0;j<=7;j++)m[i][j]='2';
	for(int i=1;i<=n;i++){
		for(int j=1;j<=5;j++){
		for(int k=1;k<=5;k++){
			cin>>p[j][k];
			m[j][k]=p[j][k];
		}
	    if(i!=n||j!=5)getchar();
	}
		dfs(1);
		if(minn!=99999)ans[i]=minn;
		else  ans[i]=-1;
		getchar();
		minn=99999;
		flag=0;
		for(int i=1;i<=25;i++)a[i]=0;
		for(ll i=1;i<=5;i++)
	    for(ll j=1;j<=5;j++)m[i][j]=p[i][j];
	}
	for(int i=1;i<=n;i++)cout<<ans[i]<<endl;
}

2025/1/27 15:32
加载中...