DFS算法–C++``
找出最短路径,其中,有些位置有障碍,不能通行。
主要用到的是递归和回溯
#include#include using namespace std; int m, n, ystart,xstart,p, q; int min = 99999; vector > a1(100,vector (100,0)) ; //表示构建的空间分布 vector > a2(100, vector (100, 0)); //表示是否被访问过 vector dy = {1 ,0 ,-1, 0}; vector dx = {0, 1 ,0 ,-1}; //空间不存在障碍物表示1,存在表示2 //a2表示空间是否被访问过,没有访问过为0,访问过为1 void dfs(int x, int y, int val) { if (x == p && y ==q) { min = min < val? min : val; return; } for (int k = 0; k < 4; k++) { int xx = x + dx[k]; int yy = y + dy[k]; if (xx < m&&xx >= 0 && yy < n&&yy >= 0) { if (a1[xx][yy] == 1 && a2[xx][yy] == 0) { a2[xx][yy] = 1; dfs(xx, yy, val + 1); a2[xx][yy] = 0; } } } //顺序为右下左上 return; } int main() { cin >> m >> n; a1.resize(m); a2.resize(m); for (int i = 0; i < m; i++) { a1[i].resize(n); a2[i].resize(n); } for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { cin >> a1[i][j]; } } cin >>xstart>>ystart>> p >> q; a2[xstart][ystart] = 1; dfs(xstart, ystart, 0); cout <



