题意:给出5x5的方格,’.'能走,其它不能走。求从起点出发,不重复地走每一个点,最终能到达终点的方案数。
#include <bits/stdc++.h>
using namespace std;
int a[5][5] = {
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1},
{1, 1, 1, 1, 1}
};
bool vis[35][35];
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
int k ;
int L ;
int ans = 0 ;
void dfs1(int step,int x,int y){
if(step==L&&x==4&&y==4){
ans++;return ;
}
for(int i = 0 ; i < 4 ; i++){
int xx = x + dx[i], yy = y + dy[i] ;
if(xx>=0&&x<5&&yy>=0&&yy<5&&!vis[xx][yy]&&a[xx][yy]==1){
vis[xx][yy] = true;
dfs1(step+1,xx,yy);
vis[xx][yy] = false;
}
}
}
int main() {
//freopen("in","r",stdin);
cin >> k ;
for(int i = 1 ; i <= k ; i++) {
int x , y ;
cin >> x >> y ;
a[x-1][y-1] = 0 ;
}
L = 25 - k ;
vis[0][0] = true;
dfs1(1,0,0);
vis[0][0] = false;
cout << ans << endl;
return 0;
}