1 条题解
-
2
迷宫问题 是一道很经典的DFS 从题目中我们要从左上角移到右下角 有8个方向其中
#
为墙,只要我们递归到这里就要返回。但是有人却一直卡在递归里,因为还有一个重要的因素判重, 简单来说就是定义一个bool类型的二维数组,这个数组就是来记录有没有到过这里,如果之前来过就返回, 不然你的程序就会在两个点中反复横跳。
别问我怎么知道的代码如下:
#include<bits/stdc++.h>//华丽的开始 using namespace std; bool f[11][11]; int n,a[11][11],ans=0; const int o[9]={0,0,-1,1,-1,1,-1,1}; const int p[9]={1,-1,0,0,-1,1,1,-1};//精彩的定义 void dg(int x,int y){// 细心的搜索 if(x==1&&y==n){ ans++; return; } if(x<1||y<1||x>n||y>n||f[x][y]||a[x][y]==1) return; f[x][y]=1; for(int i=0;i<8;i++) dg(x+o[i],y+p[i]); f[x][y]=0; } int main(){//主函数 cin>>n; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; dg(1,1); cout<<ans;//答案输出 return 0;//完美的结束 }
绝对正确(不对你打我)
信息
- ID
- 15
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 3
- 标签
- 递交数
- 9
- 已通过
- 4
- 上传者