题目链接:P1605 迷宫
程序说明:
深度优先搜索,只开了一个数组,障碍为1,搜索过的地方设为1,注意递归返回上一层要清零。
代码如下:
#include <iostream>
#define MAX 6
using namespace std;
int n, m, t, cnt = 0;
int sx, sy, fx, fy;
int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
int a[MAX][MAX];
void dfs(int x, int y) {
if(x == fx && y == fy) {
cnt++;
return;
}
else {
a[x][y] = 1;
for(int i = 0; i < 4; i++) {
int nx = x + dx[i];
int ny = y + dy[i];
if(nx > 0 && ny > 0 && nx <= n && ny <= m && a[nx][ny] == 0) {
a[nx][ny] = 1;
dfs(nx, ny);
a[nx][ny] = 0;
}
}
}
}
int main() {
cin>>n>>m>>t;
cin>>sx>>sy>>fx>>fy;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++) {
a[i][j] = 0;
}
for(int i = 1; i <= t; i++) {
int p, q;
cin>>p>>q;
a[p][q] = 1;
}
dfs(sx, sy);
cout<<cnt;
return 0;
}