递归+DFS--简单迷宫问题--百练2802

Posted 柳暗花明_liu

tags:

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

题目描述

递归函数中为什么最后有一个 =false?

ac代码:

#include<iostream>
#include<cstring>
#define maxn 75+2
#define min MIN                //min与预定义函数重名... 

int to[4][2]={{0,1},{1,0},{0,-1},{-1,0}};

bool mark[maxn][maxn];                             //标记格子是否走过 
char map[maxn][maxn]; 
int x1,x2,y1,y2;                                   //x1,y1起点 x2,y2终点 
int w,h,min;
	 
void search(int x1,int y1,int x2,int y2,int step,int f){               //递归遍历 
	if(step>min) return;
	if(x1 == x2 && y1 == y2){                     //已经到了终点 
		if(min > step)                   //更新min 或 返回上一层递归 
			min = step;
			return;
	}
	for(int i=0; i<4 ; i++){             //向四个方向遍历 
		int x = x1+to[i][0];             //下一步走x,y 
		int y = y1+to[i][1];
		
		//             x,y在边界内                 且(           x,y处无卡牌 而且未走过         或           x,y已经到达终点,终点有卡牌              ) 
		if( (x>-1) && (x<w+2) && (y>-1) && (y<h+2) && (((map[y][x]==‘ ‘) && (mark[y][x]==false)) || ((x==x2) && (y==y2) && (map[y][x] == ‘X‘))) ){    //x,y是否合法 
			mark[y][x] = true;                            //x,y合法,给一个走过的标记 
			if(f == i) search(x,y,x2,y2,step,i);          //未转向  step不变 
			else       search(x,y,x2,y2,step+1,i);        //转向    step+1 
			mark[y][x] = false;                           //看不懂    
		}
	}
}
 
int main(){
	freopen("in.txt","r",stdin);
	int i,j,count=0,game=0;

    while( scanf("%d %d",&w,&h)==2 && w!=0 ){
    	count=0;
    	game++;
    	printf("Board #%d:\n",game);
	    for(i=1;i<=h;i++){
	    	getchar();
	    	for(j=1;j<=w;j++){
	    		map[i][j]=getchar();
	    		map[0][j]=‘ ‘;
	    		map[h+1][j]=‘ ‘;
			}
			map[i][0]=‘ ‘;
			map[i][w+1]=‘ ‘;
		}
		map[0][0]=‘ ‘;map[0][w+1]=‘ ‘;map[h+1][0]=‘ ‘;map[h+1][w+1]=‘ ‘;
//		memset(mark,false,sizeof(mark));                                //要不要都行 
		while(scanf("%d %d %d %d",&x1,&y1,&x2,&y2) && x1>0){
			count++;
			min=100000;
			search(x1,y1,x2,y2,0,-1);
			if( min<10000 )
			printf("Pair %d: %d segments.\n",count,min);
			else
			printf("Pair %d: impossible.\n",count);
		}
		printf("\n");
    }
    return 0;
}

  

以上是关于递归+DFS--简单迷宫问题--百练2802的主要内容,如果未能解决你的问题,请参考以下文章

递归入门走迷宫-DFS

使用递归的迷宫深度优先路径算法

迷宫算法(DFS)

数据结构与算法大作业:走迷宫程序(C语言,DFS)(代码以及思路)

通过迷宫问题简单学习DFS和BFS算法

通过迷宫问题简单学习DFS和BFS算法