蒟蒻 彻底的 TLE 了 ,有大佬教教怎么剪枝吗?
代码在此:
#include <bits/stdc++.h>
using namespace std;
int m,n,ans=0x7fffffff;
int mp[101][101];
const int dx[]={1,-1,0,0},dy[]={0,0,1,-1};
bool vis[101][101];
void dfs(int,int,int,bool);
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>m>>n;
for(int i=1;i<=n;i++)
{
int x,y,c;
cin>>x>>y>>c;
mp[x][y]=(++c);
}
vis[1][1]=1;
dfs(1,1,0,0);
cout<<(ans==0x7fffffff? -1 : ans);
return 0;
}
void dfs(int i,int j,int num,bool used)
{
if(i==m && j==m)
{
ans=min(ans,num);
return;
}
for(int k=0;k<4;k++)
{
int nx=i+dx[k],ny=j+dy[k];
if(nx<1 || ny<1 || nx>m || ny>m || vis[nx][ny])
continue;
if(mp[nx][ny])
{
vis[nx][ny]=1;
if(mp[i][j]==mp[nx][ny])
dfs(nx,ny,num,0);
else
dfs(nx,ny,num+1,0);
vis[nx][ny]=0;
}
else if(!used)
{
mp[nx][ny]=mp[i][j];
vis[nx][ny]=1;
dfs(nx,ny,num+2,1);
mp[nx][ny]=0;
vis[nx][ny]=0;
}
}
}