1. 程式人生 > >洛谷 P1605 迷宮 dfs+回溯

洛谷 P1605 迷宮 dfs+回溯

//dfs+回溯 
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

int sx,sy,fx,fy,zx,zy;//zxzy分別代表障礙的起點和終點 

int n,m,t;
int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int obs[8][8];//代表障礙 
int walk[8][8];//代表走過了 
int ans=0;
void dfs(int x,int y)
{
	if(x<1||x>n||y<1||y>m)//越界了
	return ;
	if(walk[x][y]==1) return ;//代表走過了
	if(obs[x][y]==1)return ;
	if(x==fx&&y==fy)//代表到終點了
	{
		ans++;
		return ;
	}
	for(int i=0;i<4;i++)
	{
		walk[x][y]=1;//代表走過了
		//接下來就要回溯了 
		dfs(x+dir[i][0],y+dir[i][1]) ;
		walk[x][y]=0;
	} 
}
int main()
{
	
	int x,y; 
	cin>>n>>m>>t;
	cin>>sx>>sy>>fx>>fy;
	for(int i=0;i<t;i++)
	{
		cin>>x>>y; 
		obs[x][y]=1;//標記障礙 
	}
	dfs(sx,sy);
	printf("%d",ans);
	return 0;
}