我觉得dfs真的是太难了!!!!!!(菜鸡自述)
话不多说,先上题目,就直接贴过来了!!
作为一个小白,真的不会。。。感觉看了好多天dfs,原理的都懂就是写不出啊!!
#include <iostream>
using namespace std;
//n行m列,t个障碍物
int n,m,t;
//整个迷宫大小,由于数据范围最大是5x5的
int map[6][6];
//给一个用来存放记录的数组
bool isVis[6][6];
//上下左右四个方向
int dx[4] = {0,-1,0,1};
int dy[4] = {-1,0,1,0};
//初始位置
int sx,sy;
//结束位置
int fx,fy;
//障碍物的位置
int bx,by;
//用来计数
int total;
void dfs(int x,int y){
//如果坐标是终点位置的话,就结束,total+1
if (x == fx && y == fy){
total ++;
return;
}
else
{
//对于上下左右四个方向
for (int i = 0; i <= 3; i ++){
//如果没走过,以及没障碍物
int newx = x + dx[i];
int newy = y + dy[i];
if (map[newx][newy] == 1 && isVis[newx][newy] == 0){
isVis[x][y] = 1;
dfs(newx,newy);
isVis[x][y] = 0;
}
}
}
}
int main(){
cin >> n >> m >> t;
cin >> sx >> sy >> fx >> fy;
//在这里将m整个地图,即map里面的元素都设置为1
//因为我比较喜欢下标从1开始,所以特意开列6x6的大小的数组
for (int i = 1; i <= n; i ++){
for (int j = 1; j <= m; j ++){
map[i][j] = 1;
}
}
//把有障碍的地方标记为0
for (int i = 1; i <= t; i ++){
cin >> bx >> by;
map[bx][by] = 0;
}
//从初始点开始走
dfs(sx,sy);
//输出结果
cout <<total;
return 0;
}