迷宮-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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章