代码还能优化吗?
  • 板块灌水区
  • 楼主Wendy_Hello_qwq
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/4/15 20:58
  • 上次更新2024/4/16 08:17:45
查看原帖
代码还能优化吗?
1039211
Wendy_Hello_qwq楼主2024/4/15 20:58

1083.【搜索与回溯算法】迷宫问题

时间限制: 1 s

空间限制: 256MB

题目描述

设有一个NxN(2<=N<10)方格的迷宫,入口和出口分别在左上角和右上角。迷宫格子中分别放0和1,0表示可通,1表示不能,入口和出口处肯定是0。迷宫走的规则如下所示:即从某点开始,有八个方向可走,前进方格中数字为0时表示可通过,为1时表示不可通过,要另找路径。找出所有从入口(左上角)到出口(右上角)的路径(不能重复),输出路径总数,如果无法到达,则输出0。

输入

第一行输入n,表示n行n列的迷宫

接下来有n行,每行n个数,分别用1或0表示能否通过

输出

输出路径数

样例输入

3

0 0 0

0 1 1

1 0 0

样例输出

2

代码!

#include <cstdio>
using namespace std;
int n, ans, a[20][20], vis[20][20];
int dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0}, dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
void search (int, int);
int main()
{
	scanf ("%d", &n);
	for (int i = 1; i <= n; i++)
	for (int j = 1; j <= n; j++)
		scanf ("%d", &a[i][j]);
	vis[1][1] = 1;
	search (1, 1);
	printf ("%d", ans);
	return 0;
}
void search (int x, int y)
{
	if (x == 1 && y == n)
	{
		ans++;
		return;
	}
	for (int i = 0; i <= 7; i++)
	{
		int xx = x + dx[i];
		int yy = y + dy[i];
		if (xx >= 1 && xx <= n && yy >= 1 && yy <= n && a[xx][yy] == 0 && vis[xx][yy] == 0)
		{
			vis[xx][yy] = 1;
			search (xx, yy);
			vis[xx][yy] = 0;
		}
	}
}

瞅瞅看

2024/4/15 20:58
加载中...