DFS(深搜/4/18)
程序员文章站
2022-07-12 21:51:00
...
P1605 迷宫
一开始把newx和newy都设置成了全局变量,结果一直错,后来才发现不能这样,因为回溯的时候,回溯到前面的时候,newx newy还是后面的,没有回来,而局部变量的话就不用担心作用域内改变
#include <bits/stdc++.h>
using namespace std;
int n,m,sum;//必须都要定义在前面,养成习惯
int a[1005][1005];
int vis[60][60];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};//定义四个方向
int x,y,beginx,beginy,endx,endy,t;
void dfs(int x,int y)
{
if(x==endx&&y==endy){sum++;return;}//这一句要记得不要写在for里面
for(int i=0;i<4;i++)
{
int newx=x+dir[i][0];//这里必须是局部变量不能是全局变量,否则回溯不成功!!!
int newy=y+dir[i][1];//若是全局变量则会永久加,当回溯的时候,只会回溯最后那一个
if(newx>0&&newx<=n&&newy>0&&newy<=m&&a[newx][newy]==0&&vis[newx][newy]==0)//newx对应的是二维数组的 第一维 !!!即行数也就是n!
{
a[newx][newy]=1;
dfs(newx,newy);
a[newx][newy]=0;
}
}
}
int main()
{
cin>>n>>m;
cin>>t;
cin>>beginx>>beginy>>endx>>endy;
while(t--)
{
cin>>x>>y;
vis[x][y]=1;
}
vis[beginx][beginy]=1;
dfs(beginx,beginy);
cout<<sum<<endl;
return 0;
}