过了但是有问题,求dl解答
查看原帖
过了但是有问题,求dl解答
959481
niusitu楼主2025/1/22 20:23
#include<bits/stdc++.h>
using namespace std;
const char goal[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','0','1',
						'0','0','0','0','0','0'};
const int dx[9]={0,-2,-2,-1,-1,1,1,2,2};
const int dy[9]={0,-1,1,-2,2,-2,2,-1,1};
bool ok;

char a[6][6];
int check()
{
	int t=0;
	for (int i=1;i<=5;++i)
	{
		for (int j=1;j<=5;++j)
		{
			t+=(a[i][j]!=goal[i][j]);
		}
	}
	return t;
}
void dfs(int bx,int by,int d)
{
	if (d<=0)
	{
		if (check()==0)
			ok=1;
		return ;
	}
	for (int i=1;i<=8;++i)
	{
		int tx=bx+dx[i];
		int ty=by+dy[i];
		if (tx>=1&&tx<=5&&ty>=1&&ty<=5)
		{
			swap(a[bx][by],a[tx][ty]);
			if (check()<=d)
				dfs(tx,ty,d-1);
			swap(a[bx][by],a[tx][ty]);
		}
	}
	
}
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		ok=false;
		int bx,by;
		for (int i=1;i<=5;++i)
		{
			scanf("%s",a[i]+1);
			for (int j=1;j<=5;++j)
			{
				if (a[i][j]=='*')
				{
					bx=i;
					by=j;
					break;
				}
			}
		}
		for (int i=0;i<=15;++i)
		{
			dfs(bx,by,i);
			if (ok)
			{
				printf("%d\n",i);
				break;
			}
		}
		if (!ok) puts("-1");
	}
	return 0;
} 

为何将puts("-1")改为printf("-1\n")就只有10分

puts("-1");
2025/1/22 20:23
加载中...