记录编号 522069 评测结果 AAAAAWAAAAAAAAAAAAAA
题目名称 [NOIP 2017PJ]棋盘 最终得分 95
用户昵称 GravatarHarry Potter 是否通过 未通过
代码语言 C++ 运行时间 0.004 s
提交时间 2018-11-08 21:43:51 内存使用 0.39 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <cmath>
using namespace std;
int m,n;
int i,j,s,use,mix=999999999;
int a[102][102]={0},b[102][102]={0};
void start(int i,int j,int s,int use)
{
	int b1[5]={-1,0,1,0},b2[5]={0,1,0,-1};
	int b3,b4;
	if(i==m&&j==m)
	{
		if(s<mix)
			mix=s;
		s=0;
	}
	else
	{
		for(int k=0;k<4;k++)
		{
			b3=i+b1[k];b4=j+b2[k];
			if(b3>=1&&b3<=m&&b4>=1&&b4<=m&&s<b[b3][b4])
			{
				b[b3][b4]=s;
			if(a[b3][b4]!=0)
			{
				use=0;
				if(a[b3][b4]==a[i][j])
					start(b3,b4,s,use);
				else
					if(a[b3][b4]!=a[i][j])
						start(b3,b4,s+1,use);
			}
			else
				if(use==0)
				{
					use=1;
					a[b3][b4]=a[i][j];
					start(b3,b4,s+2,use);
					a[b3][b4]=0;
					use=0;
				}
			}
		}
	}
}
int main()
{
	freopen("checkerboard.in","r",stdin);
	freopen("checkerboard.out","w",stdout);
	int x,y,z;
	cin>>m>>n;
	for(i=1;i<=n;i++)
	{
		cin>>x>>y>>z;
		if(z==0)
			z=2;
		a[x][y]=z;
	}
	for(i=1;i<=m;i++)
	{
		for(j=1;j<=m;j++)
		{
			b[i][j]=999999999;
		}
	}
	start(1,1,0,0);
	if(mix==999999999)
		mix=-1;
	cout<<mix;
	return 0;
}