深搜dfs做法(可改进)
2025-12-07 10:54:32
发布于:浙江
0阅读
0回复
0点赞
#include <iostream>
using namespace std;
bool a[50][50];
int n,m;
bool f = 0;//用于判断是否找到合法的方案
void dfs(int x,int y)
{
if(x == n&&y == m)
{
f = 1;
}
int xn[4] = {1,-1,0,0};//x的变化值
int yn[4] = {0,0,-1,1};//y的变化值
for(int i = 0;i < 4;i++)
{
int nx = x + xn[i];
int ny = y + yn[i];
if(nx >= 1&&ny >= 1&&nx <= n&&ny <= m&&a[nx][ny] == 0)
{
a[nx][ny] = 1;//将走过的路标记为一
dfs(nx,ny);//调用自身
a[nx][ny] = 0;//回溯
}
}
}
int main()
{
//深搜做法
cin >> n >> m;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= m;j++)
{
cin >> a[i][j];//输入矩阵
}
}
dfs(1,1);//当前坐标
cout << (f?"YES":"NO");//三目运算符,可以用if-else代替
}
这里空空如也







有帮助,赞一个