link,数据还没迁移。样例一直输出 0
。
懒得找原题了。
#include<bits/stdc++.h>
using namespace std;
int k,ans;
const int dx[]={0,0,-1,1},dy[]={-1,1,0,0};
bool st[10][10];
bool check(int x,int y){
return x>=1&&x<=5&&y>=1&&y<=5;
}
bool can(int bx,int by,int mx,int my,int remain){
int dist=abs(bx-mx)+abs(by-my);
return dist<=remain;
}
void dfs(int bx,int by,int mx,int my,int remain){
if(!can(bx,by,mx,my,remain)) return;
if(bx==mx&&by==my&&remain==0){
ans++;
return;
}
for(int i=0;i<4;i++){
int nbx=bx+dx[i],nby=by+dy[i];
if(!check(nbx,nby)||st[nbx][nby]) continue;
st[nbx][nby]=1;
for(int j=0;j<4;j++){
int nmx=mx+dx[j],nmy=my+dy[j];
if(!check(nmx,nmy)||st[nmx][nmy]) continue;
st[nmx][nmy]=1;
dfs(nbx,nby,nmx,nmy,remain-2);
st[nmx][nmy]=0;
}
st[nbx][nby]=0;
}
}
int main(){
cin>>k;
int last=25;
int x,y;
while(k--){
cin>>x>>y;
st[x][y]=1;
last--;
}
st[1][1]=st[5][5]=1;
last-=2;
dfs(1,1,5,5,last);
cout<<ans<<endl;
}
回复请 @ 我。