DFS深搜解决迷宫问题(原理分析+代码实现)
深度优先搜索(DFS)
求解思路:
1.先判断是否到达目标位置,如果到达目标位置,再试探有无其他更短的路径。
2.如果没有到达目标位置,则找到下一步可以到达的位置,直到找到目标位置
说白了就是每个方向都试一下 然后把所有的路都给走一遍
#include<iostream> using namespace std; int a[50][50];//2表示障碍 int v[50][50];//1表示访问 int sx,sy,p,q;//设置起始坐标 int mi=9999; int dx[4]={1,0,-1,0};//设置向右为正 向左为负 int dy[4]={0,1,0,-1};//设置向下为正 向上为负 void dfs(int x,int y,int step) { if(x==p && y==q) { if(step<mi) { mi=step; } return ; } for(int i=0;i<=3;i++)//对这四个方向依次试探 { int tx=x+dx[i]; int ty=y+dy[i]; if(a[tx][ty]==1 && v[tx][ty]==0) { v[tx][ty]=1;//如果满足条件就对其进行访问 dfs(tx,ty,step+1);//进行的递归处理并且step要加1 到达这一步就说明步数+1 v[tx][ty]=0;//等到递归结束后就把访问设置为0 也就是进行回溯 } } return ; } int main() { int m,n; cin>>m>>n; for(int i=1;i<=m;i++) { for(int j=1;j<=n;j++) { cin>>a[i][j]; } } cin>>sx>>sy>>p>>q; v[sx][sx]=1; dfs(sx,sy,0); cout<<mi; return 0; } /* 5 4 1 1 2 1 1 1 1 1 1 1 2 1 1 2 1 1 1 1 1 2 1 1 4 3 */