【noi 2.5_1792】迷宫(bfs 或 dfs)

2018-06-17 23:48:40来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

简单搜索,在n*n的矩阵中,问从起点是否可以到达终点,有些格子不可走,上下左右四个方向都可以走。(N<=100)
1.bfs从起点开始走,直到走到终点或全部遍历过一次就结束。
2.dfs要一走到终点就返回,否则4^n会TLE。由于询问“是否可到达终点”,就直接递归“是否可以走到点(x,y)点”的函数,也是直到找到终点就结束。

下面附上dfs的代码——

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cstring>
 4 #include<iostream>
 5 using namespace std;
 6 #define N 110
 7 
 8 char s[N][N];
 9 int v[N][N],a[4]={1,-1,0,0},b[4]={0,0,1,-1};
10 int n,xx,yy;
11 
12 int goit(int x,int y)
13 {
14     if (x<0||y<0||x>=n||y>=n) return 0;
15     if (s[x][y]=='#'||v[x][y]) return 0;
16     if (x==xx && y==yy) return 1;
17     v[x][y]=1;
18     for (int i=0;i<4;i++)
19       if (goit(x+a[i],y+b[i])) return 1;
20     return 0;
21 }
22 
23 int main()
24 {
25     //freopen("a.in","r",stdin);
26     int T;
27     scanf("%d",&T);
28     while (T--)
29     {
30       scanf("%d",&n);
31       for (int i=0;i<n;i++)
32         scanf("%s",s[i]);
33       memset(v,0,sizeof(v));
34       int x,y;
35       scanf("%d%d%d%d",&x,&y,&xx,&yy);
36       int tf=goit(x,y);
37       if (tf) printf("YES\n");
38       else printf("NO\n");
39     }
40     return 0;
41 }

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:HDU 4283---You Are the One(区间DP)

下一篇:【志银】NYOJ《题目529》flip