样例过了,提交上去就显示没输出。。。咋回事哦
查看原帖
样例过了,提交上去就显示没输出。。。咋回事哦
531223
gbk002SNake楼主2021/7/6 16:05
#include<bits/stdc++.h>
using namespace std;

int suc=0;
int t,xxx,yyy;
int xx[8]={1,1,2,2,-1,-1,-2,-2};
int yy[8]={2,-2,1,-1,2,-2,1,-1};
int pi[5][5];
int tu[5][5]={{1,1,1,1,1},{0,1,1,1,1},{0,0,-6,1,1},{0,0,0,0,1},{0,0,0,0,0}};

void swap(int a,int b,int c,int d)
{
	char tt=pi[c][d];
	pi[c][d]=pi[a][b];
	pi[a][b]=tt;
}

int prc()
{
	int cn=0;
	for(int i=0;i<5;i++)
		for(int j=0;j<5;j++)
			if(tu[i][j]!=pi[i][j]&&pi[i][j]!=-6)
				cn++;
	return cn;
}

void dfs(int dep,int x,int y,int mxln)
{
	if(!prc())cout<<dep<<endl,suc=1;
	else if(prc()+dep<=mxln)
			for(int i=0;i<8;i++)
				if(x+xx[i]>=0&&y+yy[i]>=0&&x+xx[i]<5&&y+yy[i]<5)
				{
					swap(x,y,x+xx[i],y+yy[i]);
					dfs(dep+1,x+xx[i],y+yy[i],mxln);
					swap(x,y,x+xx[i],y+yy[i]);
					if(suc==1)return;
				}
	return ;
}

int main()
{

	cin>>t;
	for(int i=1;i<=t;i++)
	{
		suc=0;
		for(int j=0;j<5;j++)
			for(int k=0;k<5;k++)
			{
				int q=getchar()-'0';
				if(q==-38)q=getchar()-'0';
				pi[j][k]=q;
				if(pi[j][k]=='*'-'0')xxx=j,yyy=k;	
			}
		for(int k=0;k<=15;k++)
		{
			dfs(0,xxx,yyy,k);		
			if(suc==1) break;
		}
		if(suc==0)cout<<-1<<endl;
	}
	return 0;	
} 
2021/7/6 16:05
加载中...