马的遍历
在n*m(n表示行,m表示列)的棋盘上,马起始位置为x,y(注意:左上角第一个位置为1,1),问:马有多少种走的方法,将棋盘所有的位置全部走一遍,并且每个位置经过且仅经过一次。马跳“日”字。
输入
第一行:n,m(中间空格隔开)(n,m<7)
第二行:x,y(中间空格隔开)
输出
可能的方法数
样例
样例输入1
5 4
1 1
样例输出1
32
code:
#include <bits/stdc++.h> using namespace std; int ans = 0,n,m,arr[7][7]; int xx[9] = {0,-2,-2,-1,1,2,2,-1,1}; int yy[9] = {0,-1,1,2,2,-1,1,-2,-2}; void q(int a,int b,int k){ if(k == n*m){ ++ans; return; } for(int i = 1;i<=8;i++){ int abx = a+xx[i]; int aby = b+yy[i]; if(!arr[abx][aby] && abx > 0 && aby > 0 && abx <= n && aby <= m){ arr[abx][aby] = 1; q(abx,aby,k+1); arr[abx][aby] = 0; } } } int main(){ int x,y; cin>>n>>m; cin>>x>>y; arr[x][y] = 1; q(x,y,1); cout<<ans; return 0; }

浙公网安备 33010602011771号