求助!!
查看原帖
求助!!
1135546
qwp____5_0_3楼主2025/1/22 19:55
#include<bits/stdc++.h>
using namespace std;
int T;
int ans=0x3f3f3f3f;
bool flag=0;
const int dx[9]={-2,-2,-1,-1,1,1,2,2};
const int dy[9]={-1,1,-2,2,-2,2,-1,1};
char a[6][6]; 
char mp[6][6]={
	'0','0','0','0','0','0',
	'0','1','1','1','1','1',
	'0','0','1','1','1','1',
	'0','0','0','*','1','1',
	'0','0','0','0','1','1',
	'0','0','0','0','0','1'
};
int diff()
{
	int res=0;
	for(int i=1;i<=5;i++)
		for(int j=1;j<=5;j++)
			if(a[i][j]!=mp[i][j])
				res++;	
	return res;
}
void iddfs(int x,int y,int syd)
{
	if(syd<=0)
	{
		if(diff()==0)flag=1;
		return ;		
	}
	for(int i=0;i<8;i++)
	{
		int tx=x+dx[i];
		int ty=y+dy[i];
		if(tx>=1&&tx<=5&&ty>=1&&ty<=5)
		{
			swap(a[x][y],a[tx][ty]);
			if(diff()<=syd)iddfs(tx,ty,syd-1);
			swap(a[x][y],a[tx][ty]);
		}
	}
}
int bx,by;

int main()
{
	cin>>T;
	while(T--)
	{
		for(int i=1;i<=5;i++)
		{
			for(int j=1;j<=5;j++)
			{
				cin>>a[i][j];
				if(a[i][j]=='*')	
				{
					bx=i;
					by=j;
				}
			}	
		}	
		flag=0;
		for(int syd=0;syd<=15;syd++)
		{	
			iddfs(bx,by,syd);
			cout << syd << '\n'; 
			if(flag)
			{
				cout<<syd<<"\n";
				break;
			}
		}
		if(!flag)cout<<"-1\n";
	}

	return 0;
}
2025/1/22 19:55
加载中...