意识到自己很菜已经很久了,今天终于下定决心要把DFS跟BFS好好学一下。虽然已经决定走游戏开发的道路了,但是无论如何,算法都是不能落下的一课。
关于BFS跟DFS的定义,网上已经有很多非常详细的解法了,这里也就不在啰嗦。下面看例题,是洛谷的P1605。上题目。
首先题目是非常经典的迷宫例题,唯一的不同在于,要求每个位置都必须只走一遍。很容易想到用dfs搜索,如果达到终点,那么就把方案总和++。同时我们需要确认当前每一个位置的状态,如果当前位置已经被遍历,那么我们需要把当前位置做好标记,同时需要回溯到最初的状态,来寻找新的路径。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int s[10][10],v[10][10];
int n,m,t,startx,starty,endx,endy,sum=0;
int dx[]={1,0,-1,0};
int dy[]={0,1,0,-1};
void dfs(int x,int y){
if(x==endx&&y==endy){
sum++;
return;
}
else{