社区讨论

求助!!

P2324[SCOI2005] 骑士精神参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m67umscj
此快照首次捕获于
2025/01/22 19:56
去年
此快照最后确认于
2025/01/22 20:00
去年
查看原帖
CPP
#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;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...