蓝桥杯.迷宫(DFS+回溯)

Question:

蓝桥杯.迷宫(DFS+回溯)_第1张图片

Solve:

暴力的将每一个点都试一次,看看按照题上的路径能不能出界就可以。

值得注意的一点是最后三个字,兜圈子,这也就意味着必须对每一个走过的格子做一个标记来防止陷入无限递归。

还有别忘记纵坐标是x元素,横坐标是y元素

Code:

#include 
using namespace std;
string a[11] = {"...........",
                ".UDDLUULRUL",
                ".UURLLLRRRU",
                ".RRUURLDLRD",
                ".RUDDDDUUUU",
                ".URUDLLRRUU",
                ".DURLRLDLRL",
                ".ULLURLLRDU",
                ".RDLULLRDDD",
                ".UUDDUDUDLL",
                ".ULRDLUURRR"
               };
int res = 0;
bool judge[11][11];
void dfs(int x, int y)
{
    //走出边界了,结果加一
    if(x <= 0 || x > 10 || y <= 0 || y > 10 ) { res++; return; }
    //走过的点,返回
    if(judge[x][y]) return;
    //继续走
    if(a[x][y] == 'L')      { judge[x][y] = true; dfs(x,y-1); judge[x][y] = false; }
    else if(a[x][y] == 'R') { judge[x][y] = true; dfs(x,y+1); judge[x][y] = false; }
    else if(a[x][y] == 'U') { judge[x][y] = true; dfs(x-1,y); judge[x][y] = false; }
    else if(a[x][y] == 'D') { judge[x][y] = true; dfs(x+1,y); judge[x][y] = false; }
}
int main(void)
{
    memset(judge,false,sizeof(judge));

    for(int i = 1; i <= 10; i++)
    for(int j = 1; j <= 10; j++)
      dfs(i,j);
      
    cout <

声明:图片均来源于蓝桥杯官网,以个人刷题整理为目的,如若侵权,请联系删除~

你可能感兴趣的:(蓝桥杯,蓝桥杯,c++,c语言,算法,深度优先)