记录编号 |
381292 |
评测结果 |
AAAAAAAAAA |
题目名称 |
迷宫 |
最终得分 |
100 |
用户昵称 |
xzcxzc11 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.006 s |
提交时间 |
2017-03-11 11:25:19 |
内存使用 |
0.31 MiB |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <cstring>
using namespace std;
const int maxn = 10;
bool maz[maxn][maxn] = { 0 };
bool vis[maxn][maxn] = { 0 };
int cnt = 0;
int sx, sy, fx, fy, m, n, m_t;
struct step
{
int x;
int y;
};
const step walk[4] = {
{-1,0},{1,0},{0,-1},{0,1}
};
void dfs(int x, int y);
bool init();
bool can(int x, int y);
int main()
{
freopen("maze.in", "r", stdin);
freopen("maze.out", "w", stdout);
ios::sync_with_stdio(0);
init();
vis[sx][sy] = true;
dfs(sx, sy);
cout << cnt << endl;
return 0;
}
bool init()
{
cin >> m >> n >> m_t;
cin >> sx >> sy >> fx >> fy;
int tempx, tempy;
for (int i = 1; i <= m_t; ++i)
{
cin >> tempx >> tempy;
maz[tempx][tempy] = 1;
}
return true;
}
bool can(int x, int y)
{
if (x<1 || x>m) return false;
if (y<1 || y>n) return false;
if (vis[x][y] || maz[x][y]) return false;
return true;
}
void dfs(int x, int y)
{
int i;
if (x == fx&&y == fy) ++cnt;
else
for (i=0;i<4;++i)
if (can(x + walk[i].x, y + walk[i].y))
{
vis[x + walk[i].x][y + walk[i].y] = true;
dfs(x + walk[i].x, y + walk[i].y);
vis[x + walk[i].x][y + walk[i].y] = false;
}
}