题目描述
给定一个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;
}
来源:CSDN
作者:Saber Angel
链接:https://blog.csdn.net/xzerui/article/details/104059600