dfs解迷宫问题(带障碍物)——算法笔记

dfs解迷宫问题(带障碍物)——算法笔记_第1张图片

//用搜索来完成
#include 

using namespace std;
 
int n,m,t;		//n 行 m列 t个障碍物 
int sx,sy,fx,fy;	//起点坐标, 终点坐标 
int cnt;		//计数 

bool map[100][100];		//放障碍物 
bool vis[100][100];		//用于标记,访问过的节点不再访问。

int xx[]={1,0,-1,0};	//上下左右 四个方向 
int yy[]={0,-1,0,1};	

void dfs(int x, int y)
{
	 if(x==fx && y==fy)		//结束 
	 {
	 	cnt++;
	 	return;
	 }
	
	for(int i=0; i<4; i++)		//上下左右 四个方向 
	{
		int dx = xx[i]+x;
		int dy = yy[i]+y;
//当此点没有被访问过 且 没有障碍物 且没有越界即可访问
		if( dx>=1 && dx<=n && dy>=1 && dy<=m && !vis[dx][dy] && !map[dx][dy]) 
		{
			vis[dx][dy]=1; 
			dfs(dx,dy);
			vis[dx][dy]=0;		//回溯 
		}
	}
}


int main()
{
	cin >> n >> m >>t >> sx >> sy >> fx>> fy;
	
	while(t--)	//输入墙 
	{
		int x,y;
		cin >> x >> y;
		map[x][y] = 1;
	}
	
	dfs(sx,sy);		//从第一个点开始出发 
	vis[sx][sy]=1; 
	
	cout << cnt << endl;
	
	return 0;
}

你可能感兴趣的:(C++算法笔记)