題目描述
給定一個N*M方格的迷宮,迷宮裏有T處障礙,障礙處不可通過。給定起點座標和終點座標,問: 每個方格最多經過1次,有多少種從起點座標到終點座標的方案。在迷宮中移動有上下左右四種方式,每次只能移動一個方格。數據保證起點上沒有障礙。
1≤N,M≤5
輸入
第一行起點座標SX,SY,終點座標FX,FY。
第二行N、M和T,N爲行,M爲列,T爲障礙總數。
接下來T行,每行爲障礙點的座標。
輸出
給定起點座標和終點座標,問每個方格最多經過1次,從起點座標到終點座標的方案總數。
樣例輸入
1 1 2 2 2 2 1 1 2
樣例輸出
1
題解:
巨簡單的DFS,模板題,數據也很小
#include <bits/stdc++.h>
#define MAXN 20
using namespace std;
int rub[MAXN][MAXN];
int vis[MAXN][MAXN];
int n, m, t, bx, by, ex, ey;
int ans = 0;
int zb[4][2] = {{0,-1},{0,1},{1,0},{-1,0}};
void dfs(int x,int y)
{
if(x == ex && y == ey) { ans++;return; }
else
for(int i = 0 ; i < 4; ++i)
if(x >= 1 && x <= n && y >= 1 && y <= m && rub[x + zb[i][0]][y + zb[i][1]] == 0 && vis[x + zb[i][0]][y + zb[i][1]] == 0)
{
vis[x][y] = 1;
dfs(x + zb[i][0],y + zb[i][1]);
vis[x][y] = 0;
}
return;
}
int main()
{
scanf("%d%d%d%d",&bx,&by,&ex,&ey);
scanf("%d%d%d",&n,&m,&t);
for(int i = 1; i <= t ; ++i)
{
int x,y;
scanf("%d%d",&x,&y);
rub[x][y] = 1;
}
dfs(bx,by);
printf("%d\n",ans);
return 0;
}