//#include<stdio.h>
#include <iostream>
using namespace std;
int m,n,p,q;
int Min=100;
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<Min)
{
Min=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;
}
}
}
/*
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
*/
int main(){
int startx,starty;
// scanf("%d%d",&m,&n);
cin>>m>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=n;j++)
// scanf("%d",&a[i][j]); //1空地,2障碍物
cin>>a[i][j];
// scanf("%d%d%d%d",&startx,&starty,&p,&q);
cin>>startx>>starty>>p>>q;
v[startx][starty]=1;
Dfs(startx,starty,0);
// printf("广度优先最短路径 %d\n",Min);
cout<<"广度优先最短路径"<<Min<<endl;
return 0;
}
DFS算法C++
最新推荐文章于 2024-07-18 20:38:17 发布