参考了http://blog.csdn.net/y1196645376/article/details/69718192,这个大哥的思路很巧妙。
思路:
dfs。
实现:
#include <iostream>
#include <cstdio>
using namespace std; const int N = ;
const int dx[] = { , , -, };
const int dy[] = { , , , - }; bool vis[][]; int dfs(int x, int y)
{
if (x == || x == N || y == || y == N)
{
return ;
}
int cnt = ;
for (int i = ; i < ; i++)
{
int nx = x + dx[i];
int ny = y + dy[i];
if (nx >= && nx <= N && ny >= && ny <= N && !vis[nx][ny])
{
vis[nx][ny] = true;
vis[N - nx][N - ny] = true;
cnt += dfs(nx, ny);
vis[nx][ny] = false;
vis[N - nx][N - ny] = false;
}
}
return cnt;
} int main()
{
vis[][] = true;
cout << dfs(, ) / << endl;
return ;
}