记录编号 381292 评测结果 AAAAAAAAAA
题目名称 迷宫 最终得分 100
用户昵称 Gravatarxzcxzc11 是否通过 通过
代码语言 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;
			}
}