无限递归,答案全-1
查看原帖
无限递归,答案全-1
1081418
Echoyang楼主2025/1/5 14:47

RT,help me!!!!!!\Huge RT,help \ me!!!!!!

#include<bits/stdc++.h>
using namespace std;
bool mp[7][7],use[5][5];
int ans=6,t;
void dfs(int now,int x,int y){
    bool f=1;
    mp[x][y]=!mp[x][y];
    mp[x+1][y]=!mp[x+1][y];
    mp[x-1][y]=!mp[x-1][y];
    mp[x][y+1]=!mp[x][y+1];
    mp[x][y-1]=!mp[x][y-1];
    use[x][y]=1;
    for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++){
            if(!mp[i][j]){
                f=0;
                if(now==6){
				    use[x][y]=0;
			    	mp[x][y]=!mp[x][y];
			    	mp[x+1][y]=!mp[x+1][y];
		    		mp[x-1][y]=!mp[x-1][y];
		    		mp[x][y+1]=!mp[x][y+1];
		    		mp[x][y-1]=!mp[x][y-1];
                    return;
                }
                break;
            }
        }
    }
    if(f){
        ans=min(ans,now);
	    use[x][y]=0;
	    mp[x][y]=!mp[x][y];
	    mp[x+1][y]=!mp[x+1][y];
	    mp[x-1][y]=!mp[x-1][y];
	    mp[x][y+1]=!mp[x][y+1];
	    mp[x][y-1]=!mp[x][y-1];
        return;
    }
    for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++){
            if(!use[i][j]){
                dfs(now+1,i,j);
            }
        }
    }
    use[x][y]=0;
    mp[x][y]=!mp[x][y];
    mp[x+1][y]=!mp[x+1][y];
    mp[x-1][y]=!mp[x-1][y];
    mp[x][y+1]=!mp[x][y+1];
    mp[x][y-1]=!mp[x][y-1];
    return;
}
void start_dfs(){
    for(int i=1;i<=5;i++){
        for(int j=1;j<=5;j++){
            dfs(0,i,j);
        }
    }
    if(ans==6) cout<<-1<<'\n';
    else cout<<ans<<'\n';
}
int main(){
    cin>>t;
    while(t--){
        for(int i=1;i<=5;i++){
            int x;
            cin>>x;
            mp[i][1]=x/10000;
            mp[i][2]=x/1000%10;
            mp[i][3]=x/100%10;
            mp[i][4]=x/10%10;
            mp[i][5]=x%10;
        }
        start_dfs();
    }
}
2025/1/5 14:47
加载中...