标题:迷宫
X星球的一处迷宫游乐场建在某个小山坡上。
它是由10x10相互连通的小房间组成的。
房间的地板上写着一个很大的字母。
我们假设玩家是面朝上坡的方向站立,则:
L表示走到左边的房间,
R表示走到右边的房间,
U表示走到上坡方向的房间,
D表示走到下坡方向的房间。
X星球的居民有点懒,不愿意费力思考。
他们更喜欢玩运气类的游戏。这个游戏也是如此!
开始的时候,直升机把100名玩家放入一个个小房间内。
玩家一定要按照地上的字母移动。
#include
#include<time.h>
#include<stdio.h>
using namespace std;
#define MAX 20
char a[MAX][MAX];
int n, num = 0;
void createmap()//创建迷宫
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
int tempt = rand()%4 + 1;//随机生成迷宫步骤
switch (tempt)
{
case 1: a[i][j] = 'L'; break;
case 2: a[i][j] = 'R'; break;
case 3: a[i][j] = 'U'; break;
case 4: a[i][j] = 'D'; break;
default:
break;
}
cout << a[i][j] << " ";
}
cout << endl;
}
}
void bfs(int x, int y)
{
if (x == 0 || y == 0 || x == (n + 1) || y == (n + 1)) //判断出口
{
num++; return;
}
if (a[x][y] == 'L')
{
if (a[x][y-1] == '0') return;
a[x][y] = '0';
bfs(x , y-1);
a[x][y] = 'L';
}
if (a[x][y] == 'R')
{
if (a[x][y+1] == '0') return;
a[x][y] = '0';
bfs(x , y+1);
a[x][y] = 'R';
}
if (a[x][y] == 'U')
{
if (a[x+1][y] == '0') return;
a[x][y] = '0';
bfs(x-1, y);
a[x][y] = 'U';
}
if (a[x][y] == 'D')
{
if (a[x - 1][y] == '0') return;
a[x][y] = 0;
bfs(x + 1, y);
a[x][y] = 'D';
}
}
int main()
{
cin >> n;
createmap();
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
bfs(i, j);
}
cout << num << endl;
return 0;
}