TLE了9个点 记录链接
55分代码:
#include <bits/stdc++.h>
using namespace std;
int n,m,x,y,a[12][12],flag[15][15],first=0x7ffffff,last=-1;
int f[15][15],d[15][15],u[15][15];
inline int dfs(int now,int x,int y) {
if(x>n||y>n||x<1||y<1||flag[x][y]==1)return 0;
if(now>first&&now<u[x][y])return 0;
f[x][y]=now;
if(x==1&&y==n) {
if(first>now) {
for(register int i=1;i<=n;i++) {
for(register int j=1;j<=n;j++) {
d[i][j]=f[i][j];
}
}
first=now;
}
if(last<now) {
for(register int i=1;i<=n;i++) {
for(register int j=1;j<=n;j++) {
u[i][j]=f[i][j];
}
}
last=now;
}
return 0;
}
flag[x][y]=1;
dfs(now+1,x+1,y);
dfs(now+1,x-1,y);
dfs(now+1,x,y+1);
dfs(now+1,x,y-1);
flag[x][y]=0;
f[x][y]=0;
return 0;
}
int main() {
scanf("%d%d",&n,&m);
for(register int i=1;i<=m;i++) {
scanf("%d%d",&x,&y);
flag[x][y]=1;
}
for(register int i=1;i<=n;i++) {
for(register int j=1;j<=n;j++) {
u[i][j]=-1;
d[i][j]=0x7ffffff;
}
}
dfs(1,n,1);
printf("%d",last-first);
return 0;
}