迷宫-dfs

题目描述

给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过。给定起点座标和终点座标,问: 每个方格最多经过1次,有多少种从起点座标到终点座标的方案。在迷宫中移动有上下左右四种方式,每次只能移动一个方格。数据保证起点上没有障碍。 

1≤N,M≤5

 

输入

第一行起点座标SX,SY,终点座标FX,FY。

第二行N、M和T,N为行,M为列,T为障碍总数。

接下来T行,每行为障碍点的座标。

 

输出

给定起点座标和终点座标,问每个方格最多经过1次,从起点座标到终点座标的方案总数。

 

样例输入

1 1 2 2
2 2 1
1 2

 

样例输出

1

题解:

巨简单的DFS,模板题,数据也很小

#include <bits/stdc++.h>
#define MAXN 20
using namespace std;
int rub[MAXN][MAXN];
int vis[MAXN][MAXN];
int n, m, t, bx, by, ex, ey;
int ans = 0;
int zb[4][2] = {{0,-1},{0,1},{1,0},{-1,0}};
void dfs(int x,int y)
{
	if(x == ex && y == ey) { ans++;return; }
	else
		for(int i = 0 ; i < 4; ++i)
			if(x >= 1 && x <= n && y >= 1 && y <= m && rub[x + zb[i][0]][y + zb[i][1]] == 0 && vis[x + zb[i][0]][y + zb[i][1]] == 0)
			{
				vis[x][y] = 1;
				dfs(x + zb[i][0],y + zb[i][1]);
				vis[x][y] = 0;
			}
	return;
}
int main()
{
	scanf("%d%d%d%d",&bx,&by,&ex,&ey);
	scanf("%d%d%d",&n,&m,&t);
	for(int i = 1; i <= t ; ++i)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		rub[x][y] = 1;
	}   
	dfs(bx,by);
	printf("%d\n",ans);
	return 0;
}

 

发布了57 篇原创文章 · 获赞 12 · 访问量 4830
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章