记录编号 543555 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 [NOIP 2017PJ]棋盘 最终得分 100
用户昵称 Gravatar没啥,随心 是否通过 通过
代码语言 C++ 运行时间 0.000 s
提交时间 2019-10-05 23:57:35 内存使用 0.00 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int m,n,d[1001][1001],xx[4]={1,0,-1,0},yy[4]={0,1,0,-1};
long long f[1001][1001],ans=9999999;
int js(int x,int y,int cl,int mf,int xj)
{
	if(x==m&&y==m)
	{
		if(xj<ans) ans=xj; 
		
	}
	else
{
	//cout<<x<<" "<<y<<" "<<f[x][y]<<" "; //调试 
	//cout<<f[m][m]<<endl;
	for(int i=0;i<4;i++)
	{
		int xxx=x+xx[i];
		int yyy=y+yy[i];
		if((xxx>=1&&xxx<=m)&&(yyy>=1&&yyy<=m)&&(xj<f[xxx][yyy]))
	{	
		if(d[xxx][yyy]>=0)
		{
		    if(cl==d[xxx][yyy])
		    {
				f[xxx][yyy]=xj;
				js(xxx,yyy,cl,0,xj);
			}
			else
			{
				//if(xj+1<f[xxx][yyy])
			    //{
				    f[xxx][yyy]=xj+1;
				    js(xxx,yyy,(cl+1)%2,0,xj+1);
			    //}
			}
		}
		else
		{
		if(mf==0&&xj+2<f[xxx][yyy])
		{
				f[xxx][yyy]=xj+2;
				js(xxx,yyy,cl,1,xj+2);
		}
		}
	}
	}
}
}
int nb(){
	freopen("checkerboard.in","r",stdin);
	freopen("checkerboard.out","w",stdout);
	cin>>m>>n;
	for(int i=1;i<=m;i++)
	for(int j=1;j<=m;j++)
{
		d[i][j]=-1;
		f[i][j]=9999999;
}
	for(int i=1;i<=n;i++)
{
	int a,b,c;
	cin>>a>>b>>c;
	d[a][b]=c;
}
    js(1,1,d[1][1],0,0);
    
    if(ans==9999999) cout<<"-1";
    else
    cout<<ans;
}
int bbc=nb();
int main(){
	;
}