DFS(深度优先搜索)

bzlx1717 / 2023-05-18 / 原文

代码:

#include<bits/stdc++.h>
using namespace std;
int m, n, p, q, minn = 99999999;
int a[100][100];//1为空,2为障碍
int v[100][100];//0未访问,1已访问
int dx[4] = {0,1,0,-1};
int dy[4] = {1,0,-1,0};// 设置遍历方向
void dfs(int x, int y, int step) {
if (x == p && y == q) {
  if (step < minn)
    minn = step;
    return;// 回溯
}
//顺时针试探
for(int k=0;k<=3;k++){
  int tx,ty;
  tx = x+dx[k];
  ty = y+dy[k];
  if(a[tx][ty]==1 && v[tx][ty]==0){
    v[tx][ty]=1;
    dfs(tx,ty,step+1);
    v[tx][ty]=0;
    }
  }
return;
}
int main(){
int startx,starty;
cin>>m>>n;
for(int i=1;i<=m;i++)
  for(int j=1;j<=n;j++)
    cin>>a[i][j];
    cin>>startx>>starty>>p>>q;
    v[startx][starty] = 1;
    dfs(startx,starty,0);
    cout<<minn<<endl;
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
     */