显示代码纯文本
#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;
}