欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

洛谷 P1605 迷宫

程序员文章站 2022-05-14 18:17:31
...

一道简单的dfs。

思路

输入n和m,用一个二维数组生成一个bool类型的图(省空间),还有t个障碍,for循环t次输入障碍坐标直接把数组[x][y]改为零就把图生成好了。

dfs如下:

int dfs(int x,int y){
	if (x==Tx-1&&y==Ty-1){
		return 1;
	}
	long long sum=0;
	vis[x][y]=1;
	for (int i=0;i<4;i++){
		int tx=x+dir[i][0];
		int ty=y+dir[i][1];
		if (in(tx,ty)&&mp[tx][ty]!=1&&!vis[tx][ty]){
			sum+=dfs(tx,ty);
		}
	}
	vis[x][y]=0;
	return sum;
}

最后,完整代码如下:

#include <bits/stdc++.h>
using namespace std;
int n,m,Tx,Ty,Sx,Sy;
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};//扩展的4个方向
int mp[10][10];//地图
bool in(int x,int y){
	return 0<=x&&x<n&&y>=0&&y<m;
}//判断边界
int vis[10][10];
int dfs(int x,int y){
	if (x==Tx-1&&y==Ty-1){
		return 1;
	}
	long long sum=0;
	vis[x][y]=1;
	for (int i=0;i<4;i++){
		int tx=x+dir[i][0];
		int ty=y+dir[i][1];
		if (in(tx,ty)&&mp[tx][ty]!=1&&!vis[tx][ty]){
			sum+=dfs(tx,ty);
		}
	}
	vis[x][y]=0;
	return sum;
}//暴力dfs
int main(){
	int t;
	cin >>n>>m>>t;
	cin>>Sx>>Sy>>Tx>>Ty;
	for (int i=0;i<t;i++){
		int sbx,sby;
		cin>>sbx>>sby;
		mp[sbx-1][sby-1]=1;
	}//生成图
	cout << dfs(Sx-1,Sy-1);//输出
	return 0;
}

END

相关标签: 洛谷 题解