最基本的dfs。这代码理应超时的,我也不知为何AC了......打表我都放弃了,因为最大的数据真的要跑很久......
1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<iostream> 5 #include<algorithm> 6 using namespace std; 7 8 int n,m,len; 9 bool vis[15][15]; 10 int dx[8]={1,1,-1,-1,2,2,-2,-2},dy[8]={2,-2,2,-2,1,-1,1,-1}; 11 12 void dfs(int x,int y,int cnt) 13 { 14 if (x<0||y<0||x>=n||y>=m||vis[x][y]) return; 15 if (cnt==n*m) {len++;return;}//queue 16 vis[x][y]=true; 17 for (int i=0;i<8;i++) 18 dfs(x+dx[i],y+dy[i],cnt+1); 19 vis[x][y]=false; 20 } 21 22 int main() 23 { 24 int T; 25 scanf("%d",&T); 26 while (T--) 27 { 28 int u,v; 29 scanf("%d%d%d%d",&n,&m,&u,&v); 30 len=0; 31 memset(vis,0,sizeof(vis)); 32 dfs(u,v,1); 33 printf("%d ",len); 34 } 35 return 0; 36 }