递归入门走迷宫-DFS

Posted yanshaodian

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了递归入门走迷宫-DFS相关的知识,希望对你有一定的参考价值。

  题目链接:http://codeup.cn/problem.php?cid=100000608&pid=5

===

这题 初始点标记访问那块一开始弄反了一直提示输出超限,艹坑了我好久啊啊!


 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int m,n;//m行n列的迷宫
 4 int start_x,start_y,end_x,end_y;
 5 int map_[20][20]={0};
 6 int flag=0;
 7 bool visit[20][20]={false};
 8 int nexto[4][2]={{0,-1},{-1,0},{0,1},{1,0}};//左上右下
 9 struct Point{
10     int x;
11     int y;
12     Point(int c,int d):x(c),y(d){}
13 };
14 vector<Point>my;
15 void DFS(int x,int y){
16     int tx=0,ty=0;
17     if(x==end_x&&y==end_y){
18             flag=1;
19         for(int i=0;i<my.size()-1;i++){
20             printf("(%d,%d)->",my[i].x,my[i].y);//!不用加 &符号
21         }
22         printf("(%d,%d)
",my[my.size()-1].x,my[my.size()-1].y);
23         return;
24     }
25     for(int i=0;i<4;i++){
26         tx=x+nexto[i][0];
27         ty=y+nexto[i][1];//下一步方向
28         if(tx<1||ty<1||tx>m||ty>n||visit[tx][ty]==true) continue;//剪枝
29         if(visit[tx][ty]==false&&map_[tx][ty]==1){
30             my.push_back(Point(tx,ty));
31             visit[tx][ty]=true;
32             DFS(tx,ty);
33             visit[tx][ty]=false;
34             my.pop_back();//回溯
35         }
36     }
37 }
38 int main(){
39     while(scanf("%d %d",&m,&n)!=EOF){
40         flag=0;
41         my.clear();
42         memset(map_,0,sizeof(map_));
43         memset(visit,false,sizeof(visit));
44         for(int i=1;i<=m;i++){
45             for(int j=1;j<=n;j++){
46                 scanf("%d",&map_[i][j]);//初始化迷宫
47             }
48         }
49         scanf("%d %d",&start_x,&start_y);
50         //压入初始点
51         my.push_back(Point(start_x,start_y));
52         scanf("%d %d",&end_x,&end_y);
53         visit[start_x][start_y]=true;//就是这里!!一开始我赋值是false 一直提示输出超限,,,我还寻思我这输入输出有问题??淦- -
54         DFS(start_x,start_y);
55         if(flag==0) printf("-1
");
56     }
57     return 0;
58 }

 

以上是关于递归入门走迷宫-DFS的主要内容,如果未能解决你的问题,请参考以下文章

自动走迷宫--深度优先(非递归)算法

算法学习——DFS(暴力搜索)N皇后问题

5978 Problem F递归入门走迷宫

深度优先搜索DFS

迷宫问题

百炼3752:走迷宫--栈实现dfs