【蓝桥杯】迷宫 C++ dfs

题目描述

在这里插入图片描述

代码

#include<bits/stdc++.h>
using namespace std;
const int n = 10;
char mp[n + 5][n + 5];//存放迷宫图
bool vis[n + 5][n + 5];//标记走过的点
int ans = 0,cnt = 0;
bool dfs(int i,int j){
    
    
	if(i < 0 | i > n - 1 | j < 0 | j > n-1){
    
    //走出迷宫的条件
		return true;
	}
	if(vis[i][j]){
    
    //如果这个点走过,那就代表兜圈子了就出不去
		return false;
	}
	cnt++;
	vis[i][j] = true;//把当前这个点标记为走过的点
	if(mp[i][j] == 'L') return dfs(i,j-1);//向左走
	if(mp[i][j] == 'R') return dfs(i,j+1);//向右走
	if(mp[i][j] == 'U') return dfs(i-1,j);//向上走
	if(mp[i][j] == 'D') return dfs(i+1,j);//向下走
}
int main()
{
    
    
	for(int i = 0; i < n; i++){
    
    
		for(int j = 0; j < n; j++){
    
    
			cin>>mp[i][j];//输入迷宫
		}
	}
	for(int i = 0; i < n; i++){
    
    
		for(int j = 0; j < n; j++){
    
    
			//每次搜索这个人能不能出去前,需要先把之前标记走过的路径标记清除
			memset(vis,0,sizeof(vis));	
			if(dfs(i,j)){
    
    
				ans++;
			}
		}
	}
	
	cout<<ans<<endl;
	return 0;
}

得出答案是31,填空题直接输出31就行了,这个代码放进去会超时。

猜你喜欢

转载自blog.csdn.net/qq_63524016/article/details/129961123
今日推荐