【玄关】WA求调
查看原帖
【玄关】WA求调
743014
_H17_楼主2024/8/6 09:35
#include<bits/stdc++.h>
using namespace std;
constexpr int dx[]={1,1,-1,-1,2,2,-2,-2},dy[]={2,-2,2,-2,1,-1,1,-1},fin[5][5]={
    {1,1,1,1,1},
    {0,1,1,1,1},
    {0,0,2,1,1},
    {0,0,0,0,1},
    {0,0,0,0,0}
};
int T,maxs,bx,by;
char now[5][5];
int eval(){
    int ret=0;
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
            if(now[i][j]!=2&&now[i][j]!=fin[i][j])
                ret++;
    return ret;
}
bool check(int x,int y){
    return 0<=x&&x<5&&0<=y&&y<5;
}
bool dfs(int x,int y,int dep){
	int ev=eval();
    if(dep+ev>maxs)
        return 0;
    if(!ev)
        return 1;
    for(int i=0,nx,ny,t;i<8;i++){
        nx=x+dx[i],ny=y+dy[i];
        if(check(nx,ny)){
            swap(now[x][y],now[nx][ny]);
            t=dfs(nx,ny,dep+1);
            swap(now[x][y],now[nx][ny]);
            if(t)
                return 1;
        }
    }
    return 0;
}
void Main(){
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            cin>>now[i][j];
            if(now[i][j]=='*'){
                now[i][j]=2,
                bx=i,by=j;
            }
            else
                now[i][j]-='0';
        }
    }
    for(int maxs=0;maxs<=15;maxs++){
        if(dfs(bx,by,0)){
            cout<<maxs<<'\n';
            return;
        }
	}
    cout<<"-1\n";
    return;
}
int main(){
    for(cin>>T;T;--T)
        Main();
    return 0;
}
2024/8/6 09:35
加载中...