最基本的dfs。这代码理应超时的,我也不知为何AC了......打表我都放弃了,因为最大的数据真的要跑很久......
1 #include2 #include 3 #include 4 #include 5 #include 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;}//queue16 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\n",len);34 }35 return 0;36 }