深搜40分求助,悬关!!
  • 板块P1605 迷宫
  • 楼主Happy_Doggie
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/8/14 13:19
  • 上次更新2023/11/3 03:54:59
查看原帖
深搜40分求助,悬关!!
742221
Happy_Doggie楼主2023/8/14 13:19

代码有注释,各位 dalodalo 康一下,谢谢!

#include<bits/stdc++.h>
using namespace std;

int dx[4]={0,1,0,-1};//四个方向 
int dy[4]={1,0,-1,0};
bool mapp[6][6];//打标记用的 

int vis[105][105],num=0;
int m,n,t,sx,sy,fx,fy,l,r;

void dfs(int q,int p) {//dfs 
	if(q==fx && p==fy) {//如果到达终点,方法数加一,重新遍历下一种方法 
		num++;
		return;
	}
	int i,x,y;
	for(i=0;i<=3;i++) {//循环四个方向(板子),就不再多说了 
		x=p+dx[i];
		y=q+dy[i];
		if(mapp[x][y]==0&&vis[x][y]==1) {
			mapp[x][y]=1;
			dfs(x,y);
			mapp[q][p]=0;
		}
	}
}
int main(){
	cin>>n>>m>>t;
	cin>>sx>>sy;
	cin>>fx>>fy;
	for(int i=1;i<=n;i++) {//地图全部刷新为一 
		for(int j=1;j<=m;j++) {
			vis[i][j]=1;
		} 
	}
	for(int i=1;i<=t;i++) {//遇到障碍刷新为零 
		cin>>l>>r;
		vis[l][r]=0;
	}
	dfs(sx,sy);//dfs搜索有多少种方案 
	cout<<num<<endl;//输出 
	return 0;
}

2023/8/14 13:19
加载中...